Как правильно отключить сервер IOCP? - PullRequest
0 голосов
/ 08 сентября 2010

Я могу найти тонны статей о запуске сервера IOCP, но ни одного о том, как правильно его отключить = /

Как правильно завершить работу сервера, когда вы закончите? более конкретно, я уже использую PostQueuedCompletionStatus () , чтобы сообщить рабочим потокам о выходе, но не нужно ли мне также отменить все ожидающие операции ввода-вывода и закрыть все сокеты перед выходом?

Я обнаружил CancelSynchronousIo () в MSDN, и, похоже, я мог бы заставить каждый рабочий поток вызывать эту функцию, когда он получает уведомление о завершении, чтобы выйти ... это правильный способ сделать это?

спасибо за любую помощь в этом.

1 Ответ

2 голосов
/ 08 сентября 2010

Если вы перебираете все открытые соединения и закрываете все сокеты, то все ожидающие операции ввода-вывода завершатся самостоятельно, и сервер выключится.Вы можете либо закрыть с помощью продолжительного закрытия, чтобы разрешить завершение любых ожидающих данных записи, либо отключить задержку на сокетах и ​​вызвать сброс ожидающих данных записи и сброс соединений с помощью RST, а не чистое отключение.

У меня есть несколько примеров серверов IOCP здесь , которые вы, возможно, уже видели, но которые показывают, как вы могли бы добиться чистого отключения.

...