开发者

How to check if SSL socket gets closed (async)

I've been using boost asio for networking for some time, but never for SSL sockets. Now i'm required to use SSL sockets and they work pretty fine. But i am not able to find out when a sockets get cl开发者_如何学运维osed (I usually did this as I did with regular sockets - checking the error value when using boost::asio::async_read_until() in the callback function.

Here's some relevant code snippets:

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

The error condition is never true, even if I kill the server, or drop the client connection. How can I track if the connection is closed?


EOS is not an error condition in most APIs. It is a sentinel value returned instead of a byte count, typically zero (Unix) or -1 (Java).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜