Назад | Перейти на главную страницу

WSAECONNRESET любопытство

Как именно стек TCP в Windows определяет, что соединение было принудительно закрыто или сброшено одноранговым узлом?

Я знаю, что TCP в Windows по умолчанию пытается повторно передать неподтвержденный пакет 5 раз. Что произойдет, если после 5 попыток по-прежнему нет подтверждения? Он немедленно возвращает код WSAECONNRESET на блокирующем сокете?

Также, когда мы получаем код ошибки WSAECONNRESET, каково фактическое состояние этого TCP-соединения?

Сброс соединения обычно означает, что от удаленного хоста было какое-то сообщение, указывающее на ошибку, в отличие от отсутствия ответа, которое обычно вызывает WSAETIMEDOUT.

Например, удаленный хост может отправить ICMP-сообщение «Порт недоступен», которое будет указывать на то, что удаленное приложение закрыло свой порт.

В этот момент TCP-соединение закрывается, хотя в вашем локальном сокете все еще могут быть ресурсы, ожидающие закрытия сокета.

Имейте в виду, что поведение может немного отличаться в зависимости от того, какая именно версия операционной системы задействована.