当遇到问题时,我需要在 beast::ssl_stream<beast::tcp_stream> 上调用 async_shutdown 吗?
Do I need to call async_shutdown on beast::ssl_stream<beast::tcp_stream> when experience issues?
https://www.boost.org/doc/libs/1_72_0/libs/beast/example/http/client/async-ssl/http_client_async_ssl.cpp
std::unique_ptr<tcp::resolver> resolver_{nullptr};
std::unique_ptr<beast::ssl_stream<beast::tcp_stream>> stream_{nullptr};
void address_failure()
{
// without calling stream_.async_shutdown
//
resolver_ = std::make_unique<tcp::resolver>(strand);
stream_ = std::make_unique<websocket::stream<beast::ssl_stream<beast::tcp_stream>>>(strand, ctx);
...
}
void on_handshake(beast::error_code ec)
{
if(ec)
{
address_failure();
return;
}
...
}
问题> 当我看到连接问题时,我可以不调用 stream_.async_shutdown
直接从头开始吗?
谢谢
您可以从头开始,但如果可能,最好尝试正常关机。
请注意,相反,某些服务器可能会放弃干净关闭。这通常会导致短读取 (stream_truncated
),或者在某些情况下,会导致套接字处于 LINGERING 状态。这是一些服务器确实可以逃脱的事情,但是如果你这样做,你可能会导致另一端资源耗尽。
https://www.boost.org/doc/libs/1_72_0/libs/beast/example/http/client/async-ssl/http_client_async_ssl.cpp
std::unique_ptr<tcp::resolver> resolver_{nullptr};
std::unique_ptr<beast::ssl_stream<beast::tcp_stream>> stream_{nullptr};
void address_failure()
{
// without calling stream_.async_shutdown
//
resolver_ = std::make_unique<tcp::resolver>(strand);
stream_ = std::make_unique<websocket::stream<beast::ssl_stream<beast::tcp_stream>>>(strand, ctx);
...
}
void on_handshake(beast::error_code ec)
{
if(ec)
{
address_failure();
return;
}
...
}
问题> 当我看到连接问题时,我可以不调用 stream_.async_shutdown
直接从头开始吗?
谢谢
您可以从头开始,但如果可能,最好尝试正常关机。
请注意,相反,某些服务器可能会放弃干净关闭。这通常会导致短读取 (stream_truncated
),或者在某些情况下,会导致套接字处于 LINGERING 状态。这是一些服务器确实可以逃脱的事情,但是如果你这样做,你可能会导致另一端资源耗尽。