Сокет прослушивания неожиданно умирает
У меня проблема с тем, что TCP-сокет прослушивает порт и прекрасно работает очень долгое время - он обрабатывает несколько соединений и, кажется, работает безупречно. Однако иногда при вызове accept() для создания нового соединения вызов accept() завершается неудачно, и я получаю следующую строку ошибки из системы:
10022: An invalid argument was supplied.
Очевидно, это может произойти, когда вы вызываете accept() для сокета, который больше не слушает, но я сам не закрывал сокет и не был уведомлен о каких-либо ошибках в этом сокете.
Кто-нибудь может подумать о каких-либо причинах, по которым прослушивающий сокет может прекратить прослушивание или как может генерироваться упомянутая выше ошибка?
3 ответа
Некоторые возможности:
Другая часть вашего кода изменила значение дескриптора. Проверьте, не изменилась ли она (сохраните копию в другом месте и сравните, распечатайте ее, остановите точку записи в отладчике и т. Д.).
Что-то закрыло ручку.
Взаимодействие с глючной Winsock LSP.
Возможно, имеет смысл отладить поток сокета (либо с помощью IDE, либо через дизассемблер) и наблюдать за его выполнением на предмет того, что может привести к прекращению прослушивания.
Одна вещь, которая приходит мне в голову, это режим ожидания системы или режима гибернации. Я не уверен, как эти события обрабатываются библиотекой winsock. Возможно, сетевой интерфейс (частично) отключен.