Как установить время ожидания функции winsock? - PullRequest
0 голосов
/ 23 февраля 2012

Я собираюсь написать консольное приложение win32, которое будет работать как сервер. Я должен установить тайм-аут, чтобы принять функцию, как без подключения в 10 с отключение порта. Как я знаю, здесь есть какой-то способ:

  1. Асинхронный способ. Но я пишу консольное приложение, поэтому не могу использовать эту функцию wsaasyncselect.

  2. С функцией выбора. Но есть слово, что этот путь небезопасен. Если клиент отправил пакет RST, а затем отключился, функция выбора считает, что этот сокет все еще доступен для чтения, и функция принятия будет оставаться там вечно.

  3. С функцией тревоги. Во-первых, я стараюсь не использовать его, потому что это неожиданно для такого приложения, во-вторых, я беспокоюсь о том, безопасен он или нет.

Итак, здесь я искренне прошу вас найти способ разрешить тайм-ауту функции accept, который должен быть безопасным для потоков, и, что лучше, приятным способом.

1 Ответ

0 голосов
/ 15 января 2016

Сделать сокет неблокирующим (как предлагает @JoachimPileborg).

Вызов сделать неблокирующим сокет ioctlsocket с параметром FIONBIO.

Вот пример программы здесь .

...