Устранение неполадок в случае тайм-аута select () в Windows - PullRequest
0 голосов
/ 08 июня 2010

У меня иногда возникают проблемы с тайм-аутом select ().У меня это установлено на двадцать секунд.Система будет правильно обрабатывать сотни транзакций, но иногда происходит сбой при выбранном тайм-ауте.Он делает около 1 транзакции каждые несколько секунд, открывая и закрывая протокол tcp для каждой транзакции.Я думал, что сервер, к которому подключалось мое приложение, может иметь много ожидающих попыток подключения, но в журналах не отображаются события 4226

Еще одна вещь, которую я заметил, когда использую wireshark, я получаю SYNRST в ответ на SYN я явно отправляю.Это происходит только несколько раз за первую секунду или две, тогда я больше не вижу активности в Wireshark

Ответы [ 2 ]

0 голосов
/ 09 июня 2010

Насколько я понимаю, у вас отсутствуют ошибки при асинхронном соединении.Взгляните на этот ТАК вопрос .

0 голосов
/ 09 июня 2010

Вам может понадобиться перестраивать значение тайм-аута каждый раз, когда вы переходите в select.Очевидно, что select может изменить это значение:

С здесь :

 select() may update the timeout argument to indicate how much time was left. 

Если оно изменяет его, и вы повторно используете его для ввода обратно в select, вы можетеполучить время ожидания вы ожидаете.Это man-страница linux, однако, ваш пробег может быть очень большим для Windows, особенно если на странице man указано:

функция glibc pselect () не изменяет свой аргумент timeout;это поведение требуется POSIX.1-2001

Отчасти умозрительный ответ, надеюсь, он полезен.Возможно, если вы отправите какой-нибудь код, мы сможем подтвердить / опровергнуть эту гипотезу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...