Каково состояние сокета TCP после удаленного закрытия?
Скажем, я принял () соединение с моим сервером (который работает на Solaris), и клиент закрыл соединение. Каково состояние сокета (в категориях netstat) сокета на стороне сервера, прежде чем я закрою () его на стороне сервера? Это ОБЯЗАТЕЛЬНО?
5 ответов
Это будет CLOSE_WAIT, см. Диаграмму состояния tcp, например, на http://en.wikipedia.org/wiki/File:Tcp_state_diagram_new.svg
В этом случае сокет на клиенте будет находиться в TIME_WAIT, а сокет на сервере будет проходить через CLOSE_WAIT и довольно быстро перейдет в CLOSED, так что вы можете не поймать его в netstat, пока он полностью не исчезнет из списка.
Так должно быть CLOSE_WAIT
с конца, который начинает FIN
идет к TIME_WAIT
---> CLOSED
первый.
В этом клиент инициирует первым. Таким образом, сервер будет CLOSE_WAIT
,
CLOSE_WAIT
Вы можете проверить по:
PS auxf
lsof -a -p [server_process_id]
вы получите: носок 0,8
состояние 8: TCP_CLOSE
Я думаю, TIME_WAIT.
Вы можете проверить это с помощью "netstat" в Linux, не знаю, как это сделать в Solaris.