Как долго работает соединение winsock? - PullRequest
3 голосов
/ 08 марта 2012

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

Я обнаружил множество документов о тайм-аутах при установлении соединения, но я пытаюсь выяснить, как долго соединение сохраняется после его установления. Продолжается ли соединение до тех пор, пока одна из программ не будет закрыта? Могу ли я подключиться и подождать два часа, чтобы что-то отправить?

1 Ответ

3 голосов
/ 08 марта 2012

Нет явного ограничения времени жизни соединения (по крайней мере, в TCP). Соединение длится до одного из следующих действий:

  • Любая конечная точка (приложение) отключается (фактически соединение может оставаться в полудуплексном режиме)
  • Промежуточный объект решает разорвать соединение (например, брандмауэр, NAT и т. Д.)

В реальных интернет-соединениях обычно через некоторое время принудительно отключаются, особенно если данные не отправляются. Кроме того, в зависимости от протокола некоторые серверы отказываются держать соединение открытым в течение неопределенного времени (например, http-серверы).

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

Периодическая отправка некоторых данных (например, сообщений поддержки активности) обычно помогает. Это также помогает обнаружить, что соединение было молча разорвано.

...