我的代码如下:
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流式套接字吗?
答案 0 :(得分:2)
对shutdown()
及其ssl::stream
进行lowest_layer()
来电最为清晰。第一个ends the SSL connection和第二个ends the TCP connection。如果您在SSL关闭时收到错误,则可能是另一方在结束连接方面没有那么优雅。
答案 1 :(得分:2)
只需调用close()即可。关闭SSL套接字是不合法的:SSL中没有半关闭。请参阅RFC 2246,关于close_notify的讨论。
答案 2 :(得分:1)
我强烈建议您不要使用关机方法,也不要尊重SSL层+ TCP层(lowest_layer)。保持安全并关闭tcp lowest_layer
m_remote_socket.lowest_layer()关闭(EC);
我遇到的问题是,当您尊重SSL或TCP时,应用程序资源(套接字处理程序)将在内存中存储,直到服务器端发送关闭会话确认。