考虑在两个TCP端点之间建立的TCP连接,其中一个端点调用:
close()
:
在这里,不允许进一步读或写。
shutdown(fd, SHUT_WR)
:
这会将全双工连接转换为simplex,其中调用SHUT_WR
的端点仍然可以读取。
但是,在这两种情况下,FIN数据包都会通过线路发送到对等端点。所以问题是,接收FIN的TCP端点如何区分另一个端点是否使用了close()
或SHUT_WR
,因为在后一种情况下它应该仍然能够发送数据?
答案 0 :(得分:2)
基本上,答案是,它没有。或者更确切地说,找出的唯一一般方法是尝试发送一些数据,看看你是否得到了ACK或RST响应。
当然,应用程序协议可能会为连接的一端提供某种机制,以提前指示它不再希望再接收任何数据。但TCP本身并没有提供任何此类机制。