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()両方を呼び出すのが最もクリーンです。1つ目はSSL接続を終了し、2つ目はTCP接続を終了します。SSLシャットダウンでエラーが発生した場合は、接続を終了する際に相手側が適切に機能していない可能性があります。ssl::streamlowest_layer()

于 2013-03-09T15:32:59.787 に答える
3

シャットダウン方式を使用せず、SSLレイヤー+ TCPレイヤー(lowest_layer)を尊重しないことを強くお勧めします。安全側にいて、tcplowest_layerを次のように閉じます

m_remote_socket.lowest_layer()。close(ec);

私が直面した問題は、SSLまたはTCPを尊重するときに、サーバー側がクローズセッションACKを送信するまで、アプリケーションリソース(ソケットハンドラー)がメモリにストックされることです。

于 2018-06-09T02:04:23.760 に答える
2

close()を呼び出すだけです。SSLソケットをシャットダウンすることは合法ではありません。SSLにはハーフクローズのようなものはありません。RFC 2246、close_notifyの説明を参照してください。

于 2013-03-10T23:06:32.363 に答える