Tcp-соединения зависают в состоянии ожидания закрытия
клиент сначала закройте сокет, когда с сервера не так много данных, завершение tcp-соединения в порядке, как:
FIN -->
<-- ACK
<-- FIN, ACK
ACK -->
когда сервер занят отправкой данных:
FIN -->
<-- ACK,PSH
RST -->
и соединение с сервером приходит в состояние CLOSE_WAIT и висит там в течение длительного времени.
в чем проблема? связанные с клиентом или сервером? Это происходит на Redhat5 для локальных сокетов.
этой статьи поговорим о том, почему "RST" отправлено, но я не знаю, почему соединение с сервером застряло на CLOSE_WAIT, и не отправляйте FIN out.
[EDIT] я проигнорировал самую важную информацию, это происходит при эмуляции сети slirp qemu. Кажется, это проблема ошибки slirp для работы с тесным соединением.
3 ответов
это означает, что в потоке остались непрочитанные данные, которые клиент не закончил читать.
вы можете отключить его с помощью . вот соответствующая документация для Linux (также см. опцию себя здесь), и [вот соответствующая function2] для Win32.
это серверная сторона, которая остается открытой, поэтому на стороне сервера вы можете попробовать отключить SO_LINGER
.
Это может означать, что сервер не закрыл сокет. Вы можете легко сказать это, используя "lsof", чтобы перечислить файловые дескрипторы, открытые этим процессом, который будет включать TCP-сокеты. Исправление состоит в том, чтобы процесс всегда закрывал сокет, когда он закончен (даже в случаях ошибок и т. д.)