Скажем, я принял() подключение к моему серверу (которое работает в Solaris), и клиент закрыл соединение. Каково состояние сокета (в категориях netstat) сокета на стороне сервера, прежде чем я закрою() его на стороне сервера? Это BOUND?Что такое состояние сокета TCP после удаленного закрытия?
ответ
Я думаю, TIME_WAIT.
Вы можете проверить это с помощью «netstat» в Linux, не знаете, как это сделать на Solaris.
Это будет CLOSE_WAIT, см. Диаграмму состояния tcp, например. on http://en.wikipedia.org/wiki/File:Tcp_state_diagram_new.svg
В этой ситуации сокет на клиенте будет находиться в TIME_WAIT, а сокет на сервере будет проходить через CLOSE_WAIT и быстро переместится в ЗАКРЫТО, чтобы вы не могли его поймать в netstat, прежде чем он исчезнет из списка в целом ,
Это должно быть CLOSE_WAIT
с конца, который intiates FIN
идет к TIME_WAIT
--->CLOSED
первый.
В этом заключается именно тот, который инициирует первый. Таким образом, сервер перейдет на CLOSE_WAIT
.
CLOSE_WAIT
вы можете проверить:
пс auxf
Lsof -a -p [server_process_id]
вы получите: носок 0,8
состояние 8 : TCP_CLOSE
Нет, TIME_WAIT является _after_ socket закрыт() на локальном конце. Я спросил о состоянии перед закрытием() дескриптора. – tadeusz 2008-12-15 10:29:59