Требования к повторным соединениям TCP - PullRequest
0 голосов
/ 06 марта 2012

Я использую Winsock, и мне нужно повторно установить TCP-соединение со сторонним сервером.Эти приложения могут оставаться в течение нескольких дней.Я единственный клиент, подключающийся к серверу.Время между соединениями составляет порядка секунд, и соединение остается в силе только достаточно долго, чтобы отправить одно сообщение из нескольких байтов.В настоящее время я вижу, что соединения начинают терпеть неудачу (WSAECONNREFUSED) через несколько часов.Должен ли я что-то сделать (например, параметры сокетов и т. Д.), Чтобы обеспечить частое повторение соединений в течение неопределенного периода времени?Спасибо!

1 Ответ

2 голосов
/ 06 марта 2012

При выполнении большого количества соединений на основе транзакций и проблемах с продолжительностью состояния TCPE TIME_WAIT (которая длятся 2MSL = 120 секунд), приводящей к тому, что клиентский хост больше не доступен для соединения с хостом специального сервера, вы должны рассмотреть UDP и управлять самим собой. повторная отправка потерянных запросов.

Я знаю, это звучит странно. Но стандартные службы, такие как DNS, должны использовать UDP для обработки тонны транзакций (запросить один ответ в одном сегменте UDP), чтобы избежать проблем, которые вы сами экспериментируете. Веб-браузеры отправляют запрос с использованием UDP на DNS. Повторный запрос выполняется с использованием UDP через короткое время, я полагаю, не более нескольких миллисекунд. Иногда разрешенное имя слишком длинное и не помещается в пакет UDP. Как следствие, DNS-сервер отправляет UDP-ответ с поднятым выделенным флагом, чтобы на этот раз попросить клиента использовать TCP.

Кроме того, вы можете рассмотреть также расширение T / TCP (Transactional TCP) TCP, если оно доступно на вашей платформе Windows. Он обеспечивает надежность TCP с более коротким состоянием TIME_WAIT, так как почти не требует затрат на модификации вашего клиентского кода. Насколько я знаю, это может работать, даже если сервер не поддерживает это расширение. Как примечание стороны, это в настоящее время не используется в Интернете, поскольку, как известно, имеет некоторый недостаток ...

...