我试图在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>
的地方。