c++ - 如何检查 SSL 套接字是否关闭(异步)

标签 c++ boost ssl boost-asio

一段时间以来,我一直在使用 boost asio 进行网络连接,但从未使用过 SSL 套接字。现在我需要使用 SSL 套接字,它们工作得很好。但是我无法确定套接字何时关闭(我通常像处理常规套接字一样这样做 - 在回调中使用 boost::asio::async_read_until() 时检查错误值功能。

下面是一些相关的代码片段:

boost::asio::streambuf streambuf;
boost::asio::ssl::context sslctx(io_service, boost::asio::ssl::context::tlsv1);
boost::asio::ssl::stream<boost::asio::ip::tcp::socket> sock(io_service, sslctx);

void DoAsyncRead()
{
    boost::asio::async_read_until(sock, streambuf, "\n", MyReadHandler);
}

void MyReadHandler(const boost::system::error_code& error, size_t bytes_transferred)
{
  if (error) {
    std::cout << "Read error: " << error.message() << std::endl;
  } else {
    // ...
  }
}

错误条件永远不会为真,即使我终止服务器或断开客户端连接。如何跟踪连接是否已关闭?

最佳答案

EOS 在大多数 API 中都不是错误条件。它是返回的标记值而不是字节数,通常为零 (Unix) 或 -1 (Java)。

关于c++ - 如何检查 SSL 套接字是否关闭(异步),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088543/

相关文章:

jquery - 在 Safari 中使用 HTTPS 时 AJAX 请求不起作用

ruby - 与此命令等效的 Ruby OpenSSL 库是什么?

c++ - 头文件包含在纯虚类中

c++ - 运算符问题 ==

c++ - 如何获取字符串的一部分

c++ - Boost.Spirit 解析器不匹配

boost - 如何确定 CMake 的 Boost 库名称

c++ - 在这种情况下如何测试左值或右值

c++ - 为 C++/Boost 库(netbeans 或 eclipse)设置环境

ruby-on-rails - 为什么我的 Rails 应用程序中会出现使用 force_ssl 的无限重定向循环?