当遇到问题时,我需要在 beast::ssl_stream<beast::tcp_stream> 上拨打async_shutdown吗?


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),或者在某些情况下,套接字处于逗留状态。有些服务器确实可以这样做,但是如果你这样做,你可能会导致另一端的资源耗尽。

最新更新