Как мы знаем, что:
/////////////////////////////////////////////////////////////
close () прервет оба направления по TCP-соединению
shutdown () может заблокировать связьв одном или обоих направлениях
///////////////////////////////////////////////////////////////
вот, что меня озадачило, как стек tcp может отличить их друг от друга?
Я написал пример программы:
сначала я использую:
....
connect(192.168.1.100) //there is a server process running in 192.168.1.100
....
close(socketfd);
sleep(1000);
затем я использую wireshark для вывода пакетов:
01 -->syn
02 <--syn,ack
03 -->ack
04 -->fin,ack
05 <--ack
netstat -an | grep 192.168.1.100
Я запустил его в течение 5 минут, сначала он напечатал:
"tcp 0 0 ... FIN_WAIT2", затем примерно через 2 минуты ничего не выводится, кажется, что соединение было разорвано.
затем я использую:
....
connect(192.168.1.100)
....
shutdown(socketfd,SHUT_WR);
sleep(1000);
используйте wireshark для выгрузки пакетов:
01 -> syn
02 <- syn,ack </p>
03 -> ack
04 -> плавник, ack
05 <- ack </p>
...
netstat -an | grep 192.168.1.100
запустить его около 10 минут, он всегда печатает: "tcp 0 0 ... FIN_WAIT2"
с выхода wireshark, кажется, нетотличается для закрытия и выключения,
, но из вывода netstat его поведение отличается.
так почему поведение отличается?