我一直在使用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 {
// ...
}
}
即使我终止服务器或丢弃客户端连接,错误情况也永远不会发生。如何跟踪连接是否已关闭?
答案 0 :(得分:0)
在大多数API中,EOS不是错误条件。它是返回的sentinel值而不是字节数,通常为零(Unix)或-1(Java)。