гнездо для прослушивания неожиданно умирает - PullRequest
1 голос
/ 25 августа 2009

У меня проблема с тем, что TCP-сокет прослушивает порт и прекрасно работает очень долгое время - он обрабатывает несколько соединений и, кажется, работает безупречно. Однако иногда при вызове accept () для создания нового соединения вызов accept () завершается неудачно, и я получаю следующую строку ошибки из системы:

10022: An invalid argument was supplied.

Очевидно, это может произойти, когда вы вызываете accept () для сокета, который больше не прослушивает, но я сам не закрыл сокет и не получил уведомления о каких-либо ошибках в этом сокете.

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

Ответы [ 3 ]

3 голосов
/ 25 августа 2009

Некоторые возможности:

  • Другая часть вашего кода изменила значение дескриптора. Проверьте, не изменилась ли она (сохраните копию в другом месте и сравните, распечатайте ее, остановите точку записи в отладчике, что угодно).

  • Что-то закрыло ручку.

  • Взаимодействие с глючной Winsock LSP.

1 голос
/ 27 августа 2009

Возможно, имеет смысл отладить поток сокета (либо с помощью IDE, либо через дизассемблер) и наблюдать за его выполнением на предмет того, что может привести к его остановке.

1 голос
/ 25 августа 2009

Одна вещь, которая приходит мне в голову, это режим ожидания системы или спящий режим. Я не уверен, как эти события обрабатываются библиотекой winsock. Возможно, сетевой интерфейс (частично) отключен.

...