如何接受boost :: asio :: ssl :: stream 作为boost :: asio :: ip :: tcp :: socket类型的参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何接受boost :: asio :: ssl :: stream 作为boost :: asio :: ip :: tcp :: socket类型的参数相关的知识,希望对你有一定的参考价值。
我试图在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流使用的原始套接字?
尝试使用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>
的地方。
以上是关于如何接受boost :: asio :: ssl :: stream 作为boost :: asio :: ip :: tcp :: socket类型的参数的主要内容,如果未能解决你的问题,请参考以下文章
在使用Boost :: asio之前从套接字读取之后是否可以执行async_handshake?
在 Boost.Asio 中同时使用 SSL 套接字和非 SSL 套接字?