如何接受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 套接字?

boost::asio::ssl::context 可以在多个 SSL 流之间共享吗?

boost/asio/ssl 抛出“未定义的引用”错误

如何创建 boost ssl iostream?

boost asio ssl async_shutdown 总是以错误结束?