TCP端点如何知道另一个端点是关闭了连接的两半还是仅关闭了一半?

时间:2013-01-12 12:00:40

标签: tcp half-close

考虑在两个TCP端点之间建立的TCP连接,其中一个端点调用:

  1. close(): 在这里,不允许进一步读或写。

  2. shutdown(fd, SHUT_WR): 这会将全双工连接转换为simplex,其中调用SHUT_WR的端点仍然可以读取。

  3. 但是,在这两种情况下,FIN数据包都会通过线路发送到对等端点。所以问题是,接收FIN的TCP端点如何区分另一个端点是否使用了close()SHUT_WR,因为在后一种情况下它应该仍然能够发送数据?

1 个答案:

答案 0 :(得分:2)

基本上,答案是,它没有。或者更确切地说,找出的唯一一般方法是尝试发送一些数据,看看你是否得到了ACK或RST响应。

当然,应用程序协议可能会为连接的一端提供某种机制,以提前指示它不再希望再接收任何数据。但TCP本身并没有提供任何此类机制。