Как восстановить ошибку Boost ASIO async_handshake - PullRequest
0 голосов
/ 04 июня 2018

Я следовал примерам для создания клиента ASIO SSL, и мое приложение работает нормально, пока не обнаружены сетевые ошибки.Я использовал Clumsy для симуляции пропущенных пакетов между моим клиентским приложением и сервером, и именно тогда у меня возникают ошибки, с которых я не могу восстановиться.В частности, вызов async_connect вызовет мой обработчик соединения, который вызывает async_handshake.Вызов async_handshake никогда не возвращается.Если я ввожу асинхронный таймер для прерывания async_handshake, я получаю управление обратно в своем приложении, затем я удаляю сокет и создаю новый и пытаюсь подключиться снова, вызывая io_context-> post с адресом моей функции, которая будет вызывать async_connect.Вызов io_context-> post вызовет исключение каждый раз.Исключение говорит о том, что я пытаюсь получить доступ к итератору, выходящему за пределы, но у меня нет никаких итераторов в моем вызове подключения.У меня вопрос, как мне восстановиться после сброшенных пакетов в функции async_handshake?Не прерывая async_handshake таймером, мое приложение остается в подвешенном состоянии, ожидая завершения SSL-рукопожатия.Использование таймера приводит к тому, что функция Boost io_context запускает исключение.Как мне попытаться решить эту проблему?

...