Boost.Asio SSL изящное закрытие - PullRequest
3 голосов
/ 15 апреля 2011

Я пытаюсь обработать сценарии ошибок SSL, когда, например, SSL async_handshake () занимает слишком много времени. Через некоторое время (скажем, 20 секунд) я хочу закрыть это соединение (lower_layer (). Close ()). Я передаю shared_ptr с объектом соединения в качестве параметра async_handshake (), поэтому объект все еще существует, в конечном итоге вызывается обработчик рукопожатия и объект уничтожается.

Но, тем не менее, я получаю спорадические сбои! Похоже, что после close () SSL все еще пытается читать или работать с буфером чтения.

Итак, основной вопрос - безопасно ли закрывать () SSL-соединение?

Есть идеи?

1 Ответ

1 голос
/ 15 апреля 2011

Как правило, я использовал метод остановки незавершенных асинхронных операций над сокетом socket::cancel, как описано в документации . Их обработчики будут вызываться с asio::error::operation_aborted в качестве параметра ошибки, который вам нужно как-то обработать.

Тем не менее, я не вижу проблемы с использованием close вместо cancel. Хотя трудно предложить большую помощь или совет без некоторого кода для анализа.


Обратите внимание, что на некоторых платформах Windows возникают проблемы при отмене незавершенных асинхронных операций. В документации есть предложения для переноса данных, если ваше приложение должно поддерживать Windows.

...