Как закрыть серверный сокет boost asio со всеми подключенными клиентскими сокетами

я использую повышение: ASIO :: IP :: Tcp :: акцептор создать сокет сервера в моем приложении. Я закрываю это гнездо акцептора, используя close функция, чем stop функция в io_service но все подключенные клиентские сокеты закрываются только тогда, когда мое приложение закрыто. Как я могу это исправить?
Спасибо!

2

Решение

Выполните одно из следующих действий:

  • взывать socket::close() на розетках.
  • уничтожить сокет. Увидеть этот Ответьте для деталей о том, как сокет будет закрыт во время разрушения.

io_service::stop() останавливает только обработку цикла событий. Работу еще можно выложить в io_serviceи существующая работа останется в io_service, Таким образом, приложение должно вызвать socket::close() на каждой из розеток он хочет закрыть. Для переносного изящного закрытия звоните socket::shutdown() перед звонком close(),

Возможно, стоит потратить время на обзор Boost.Asio’s HTTP-сервер 1 пример. Он использует connection_manager отключить все соединения.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]