У меня есть серверное приложение на основе Winsock, которое использует порты завершения ввода-вывода Windows Winsock.Winsock - прекратить принимать новые соединения, но сохранить связь с существующими соединениями
Таким образом, каждое соединение принято связано с гнездом для прослушивания, чтобы начать получать уведомления (чтение, запись, закрытие и т.д. ').
У прослушивающего сокета есть отставание от 100 ожидающих соединений.
Все хорошо.
В каком-то момент я хочу прекратить прием новых подключений пока держать связь с уже существующими, подключенными подключенными сокетами.
Я полагал, что я мог бы сделать одно из следующего:
- Стоп вызова WSAAccept().
- Установите отставание на ноль, эффективно запретив любое подключение к отложенному.
- Вызов выключения() & closesocket() в гнезде для прослушивания.
В настоящее время вариант № 1 дает ожидаемые результаты; Мое приложение не обрабатывает новые подключения, но оно принимает до суммы отставания (100). Связи практически сделаны - я не хочу этого!
Вариант № 2; Я могу это сделать? Как? Не удалось найти на MSDN или Google. В документации по listen() говорится:
Если функция слушать называется на уже слушающий сокет, он будет возвращение успех без изменения значения для параметра задела. Установка параметра backlog в 0 в Последующий вызов для прослушивания на прослушивающем гнезде не считается правильным сбросом , особенно если есть соединений на сокете.
Не хорошо для меня.
Если бы я мог сделать это безопасным способом, я бы объединил его с опцией № 1, эффективно прекратив установку любых новых подключений на машине (через порт прослушивания!).
Вариант № 3 фактически работает; После закрытия прослушивающего сокета я все еще могу общаться с существующими подключениями, а отставание пропало (ну, закрыл гнездо для прослушивания!).
Я обеспокоен тем, что этот подход может иметь некоторые побочные эффекты. Может ли кто-нибудь подтвердить?
Да, # 3 - правильный ответ. –
Отличный ответ!«Доказательство» - это именно то, что мне нужно для спокойствия! Видишь ли, я боялся, что ассоциация новоприобретенной связи с гнездом для прослушивания IOCP создаст некоторую зависимость. Еще раз спасибо! – Poni