Некоторое время я использовал 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 {
// ...
}
}
Состояние ошибки никогда не выполняется, даже если я отключаю сервер или сбрасываю клиентское соединение. Как я могу отслеживать, закрыто ли соединение?