Могут ли соединения Winsock случайно обрываться? - PullRequest
0 голосов
/ 23 ноября 2010

У меня есть блокирующий клиент / сервер, подключенный локально через Winsock. Клиент использует Firefox для получения данных с веб-сайтов, передавая определенные данные на сервер для дополнительной обработки. Сервер всегда отвечает, и обработка может занять от 1/10-й секунды до нескольких минут. У клиента нет соединения winsock ни с чем, кроме сервера; все веб-данные извлекаются на жесткий диск через Firefox.

Эта настройка работает достаточно хорошо, пока, по-видимому, случайно, recv клиента не вернет -1 (SOCKET_ERROR) с кодом ошибки 10054 (WSAECONNRESET). Это означает, что сервер предположительно разорвал соединение, но на самом деле сервер все еще ожидает восстановления, как будто ничего не случилось. Таким образом, соединение не удалось в течение 5 минут или после работы в течение примерно полутора часов. Клиент отправляет около 10 различных типов запросов на сервер, и на разных из них произошел сбой. Частота запросов примерно постоянна, вероятно, в среднем 10-15 в минуту. При разрыве соединения ни у одного компьютера не возникает проблем с интернетом, и удаленный рабочий стол не отключается.

Первоначально я думал, что утечки памяти, но после обширной отладки я вполне уверен, что больше не существует. Иногда Firefox задействует значительный HTTP-трафик, поэтому я подумал, что, может быть, это может заполнить доступное буферное пространство сокетов или что-то в этом роде - кажется сомнительным, но на данный момент я действительно не уверен. Таким образом, это может быть больше утечек памяти, может быть скрытого переполнения буфера, слишком много веб-трафика? Что вызывает случайное сбой моего приложения Winsock?

1 Ответ

2 голосов
/ 23 ноября 2010

Звучит как брандмауэр на работе.

Многие брандмауэры настроены на прекращение неактивных соединений (т. Е. Открывают сеансы TCP, в которых данные не передаются в течение некоторого времени).Особенно, если это HTTP-соединение, которое обычно не является постоянным.

...