6

我的代码如下:

declaration: boost::asio::ssl::stream<boost::asio::ip::tcp::socket> m_remote_socket;

m_remote_socket.shutdown(ec);
if (ec)
{      
    cdbug<<"id: "<<m_id<<", error when ssl shutdown: "    <<boost::system::system_category().message(ec.value()).c_str(); 
}
m_remote_socket.lowest_layer().shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec);
if (ec)
{
    cdbug<<"id: "<<m_id<<", error when tcp shutdown: "<<boost::system::system_category().message(ec.value()).c_str(); 
}

每次我打电话m_remote_socket.shutdown,都会出错。这种错误值非常大的未知错误。

但是m_remote_socket.lowest_layer().shutdown()不调用直接调用也是可以的m_remote_socket.shutdown

谁能告诉我如何关闭 ssl 流式套接字?

4

3 回答 3

6

shutdown()同时调用 thessl::stream和 its是最干净的lowest_layer()。第一个结束 SSL 连接,第二个结束 TCP 连接。如果您在 SSL 关闭时遇到错误,则可能是对方在结束连接时没有那么优雅。

于 2013-03-09T15:32:59.787 回答
3

我强烈建议您不要使用关闭方法并且不要尊重 SSL 层 + TCP 层(lowest_layer)。保持安全并关闭 tcp 最低层为

m_remote_socket.lowest_layer().close(ec);

我面临的问题是,当您尊重 SSL 或 TCP 时,应用程序资源(套接字处理程序)将存储在内存中,直到服务器端发送关闭会话确认。

于 2018-06-09T02:04:23.760 回答
2

只需调用 close()。关闭 SSL 套接字是不合法的:在 SSL 中没有半关闭这样的事情。请参阅 RFC 2246,关于 close_notify 的讨论。

于 2013-03-10T23:06:32.363 回答