在网络编程中,我在A和B之间建立了tcp连接时编写了2个TCP程序A和B,如果我想关闭它,我可以在A上使用以下代码片段:
int main(){
...... //blabla
shutdown(sockfd, SHUT_RDWR);
close(sockfd);
return; // program finish
}
这样,socket 就会向 B 发送 FIN/ACK 并从 B 接收 ACK。我使用 tcpdump 抓包,我注意到只有从 A 到 B 的 FIN/ACK 和从 B 到 A 的 ACK,所以有只有2个步骤。但是对于tcp teardown,应该有4个步骤,从B到A的FIN / ACK和从A到B的ACK sebsequently。所以,它是不完整的。
所以我的问题是如何完成这 4 个步骤,因此,我想知道
1 程序 B 如何检测 A 是否发送了 SYN/ACK,如果 B 正在发送,n=recv();
那么如果 n 是0
,则表示 A 已经主动关闭。但是如果 B 空闲,如何检测?如果 B 正在做n=sendto()
,我认为如果n<0
,那么 A 会主动关闭,但我的测试似乎我的想法是错误的。
2 我怎样才能让程序A完成前4步的TCP拆解return
(退出程序)
谢谢!