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

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

> close():
这里,不允许进一步读或写.
> shutdown(fd,SHUT_WR):
这会将全双工连接转换为simplex,其中调用SHUT_WR的端点仍然可以读取.

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

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

当然,应用程序协议可能为连接的一方提供某种机制,以提前指示它不再想要接收更多数据.但TCP本身并没有提供任何此类机制.

点赞