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

时间:2011-05-22 14:29:27

标签: 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 {
    // ...
  }
}

即使我终止服务器或丢弃客户端连接,错误情况也永远不会发生。如何跟踪连接是否已关闭?

1 个答案:

答案 0 :(得分:0)

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