如何接受boost :: asio :: ssl :: stream 作为boost :: asio :: ip :: tcp :: socket类型的参数

问题描述 投票:1回答:1

我试图在Boost docs here中调整SSL服务器示例,但我想创建一个应用程序,你可以使用普通的boost::asio::ip::tcp::socket或SSL套接字,但我还没有找到一个很好的方法来传递给像void do_something_with_socket(boost::asio::ip::tcp::socket& sock)这样的函数,因为SSL套接字不从原始TCP套接字继承。我唯一能想到的就是到处使用模板,但我想知道是否有更好的方法可以做到这一点?谢谢。

编辑:我看了boost::asio::ssl::stream<boost::asio::ip::tcp::socket>的成员,我发现next_layer()是一个boost::asio::ip::tcp::socket但我已经尝试过它并没有加密数据,因为我猜这是SSL流使用的原始套接字?

c++ sockets ssl boost tcp
1个回答
1
投票

尝试使用lowest_layer()而不是下一层。

例如,这个asio HTTP library使用“模板无处不在”并使用以下代码连接SSL套接字:

void connect_socket(ConnectHandler connect_handler,
                    ASIO::ip::tcp::resolver::iterator host_iterator)
{ ASIO::async_connect(socket_.lowest_layer(), host_iterator, connect_handler); }

socket_boost::asio::ssl::stream<boost::asio::ip::tcp::socket>的地方。

© www.soinside.com 2019 - 2024. All rights reserved.