在tcp连接终止

时间:2014-11-08 20:18:21

标签: tcp

如果它没有向两个方向关闭,它是否会永远关闭 - 无论过期时间器? - 它可以半关闭但是如果只有一个启动close(),tcp连接可以终止吗?

换句话说: 在TCP连接终止中 - 当只有客户端启动关闭但服务器没有关闭时,您是否可以完全关闭连接。 或者可以通过两种方式独立关闭tcp连接吗?

1 个答案:

答案 0 :(得分:1)

每个对等体可以独立于另一个对等体关闭TCP连接,当对等体尝试从对等体读取时,对等体只会获得EOF(例如,不再有字节),如果它尝试写入连接,则获得ECONNRESET或EPIPE由对等方关闭,但仅当套接字知道对等方不想接收更多数据时,请参见下文。

关闭连接实际上包含两部分:

  • 应用程序不会再发送任何数据:shutdown(sock,SHUT_WR)。在这种情况下,内核将向对等体发送FIN,以便发出不再有数据的信号。从同伴那里读书将返回EOF。
  • 应用程序不希望收到更多数据:shutdown(sock,SHUT_RD)。在这种情况下,最初不会向对等方发送任何信息,但是如果从对等方收到数据,则它们将被RST拒绝。

调用close()相当于同时关闭连接的两端(SHUT_RDWR)。