在TCP连接中终止

愚蠢的

如果没有在两个方向上都关闭,则它将永远不会关闭-不管到期计时器如何?-它可以半关闭,但是如果只有一个启动close(),则tcp连接可以终止吗?

换句话说:在TCP连接终止中-当只有客户端发起关闭而服务器没有发起关闭时,您可以完全关闭连接吗?还是可以通过两种方式分别关闭tcp连接?

斯蒂芬·乌尔里希(Steffen Ullrich)

每个对等方都可以独立于其他对等方关闭TCP连接,并且当对等方尝试从对等方读取数据时,它只会获得EOF(例如,没有更多的字节);如果尝试写入已关闭的连接,则对等方将获得ECONNRESET或EPIPE仅在套接字知道对等方不想接收更多数据的情况下,才由对等方访问,请参阅下文。

断开连接实际上包括两部分:

  • 应用程序将不再发送任何数据:shutdown(sock,SHUT_WR)在这种情况下,内核将向对等方发送一个FIN,从而发出信号,表明将不再有其他数据。从同级读取将返回EOF。
  • 应用程序不希望接收更多数据:shutdown(sock,SHUT_RD)在这种情况下,最初不会将任何信息发送给对等方,但是如果从对等方接收到数据,则将使用RST拒绝这些数据。

close()因此,调用等同于同时关闭连接的两侧(SHUT_RDWR)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章