Я играю с самодельным tcp-сервером nodejs и тестирую его поведение с помощью netcat под Linux. После установления соединения сервер отправляет строку «Test» по линии и закрывает сокет. Я ожидаю, что netcat закроет соединение на своей стороне, отправив соответствующие TCP-пакеты, но это не так! Вот что я делаю:
nc -v localhost 9000
После этого весь разговор выглядит так:
netcat --> server (SYN)
netcat <-- server (SYN, ACK)
netcat --> server (ACK)
netcat <-- server (PSH, ACK)
netcat --> server (ACK)
netcat <-- server (FIN, ACK)
netcat --> server (ACK)
В этот момент я бы ожидал, что netcat отправит FIN, но этого никогда не происходит. Соединение зависает в FIN-WAIT-2 с одной стороны и CLOSE-WAIT с другой.
Если я попробую то же самое с telnet:
telnet localhost 9000
он ведет себя так, как ожидалось, и разрывает соединение после получения строки «Тест».
Вопрос в том, почему netcat ведет себя иначе?