4

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

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

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

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

4

1 回答 1

2

基本上,答案是,没有。 或者更确切地说,找出答案的唯一通用方法是尝试发送一些数据并查看您是否收到 ACK 或 RST 作为响应。

当然,应用程序协议可能会为连接的一侧提供某种机制,以提前表明它不再希望接收更多数据。但是 TCP 本身并没有提供任何这样的机制。

于 2013-01-12T12:31:30.727 回答