当遇到问题时,我需要在 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 状态。这是一些服务器确实可以逃脱的事情,但是如果你这样做,你可能会导致另一端资源耗尽。