Как проверить, закрывается ли сокет SSL (асинхронно) - PullRequest
2 голосов
/ 22 мая 2011

Некоторое время я использовал 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 голосов
/ 23 мая 2011

EOS не является ошибкой в ​​большинстве API. Это возвращаемое значение вместо счетчика байтов, обычно ноль (Unix) или -1 (Java).

...