一段时间以来,我一直在使用 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/