tcp中的连接终止

tcp中的连接终止,tcp,Tcp,如果它在两个方向上都不关闭,它是否永远不会关闭?无论过期时间如何它可以半关闭,但如果只有一个启动close(),tcp连接会终止吗 换言之: 在TCP连接终止中-当只有客户端启动关闭而服务器未启动关闭时,是否可以完全关闭连接。 或者tcp连接可以通过两种方式独立关闭吗?每个对等方都可以独立于另一方关闭tcp连接,并且对等方在尝试从对等方读取数据时,只需获得EOF(例如不再有字节),或者在尝试写入对等方关闭的连接时,获得ECONRET或EPIE,但只有当套接字知道对等方不想接收更多数据时,请参见下

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

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

每个对等方都可以独立于另一方关闭tcp连接,并且对等方在尝试从对等方读取数据时,只需获得EOF(例如不再有字节),或者在尝试写入对等方关闭的连接时,获得ECONRET或EPIE,但只有当套接字知道对等方不想接收更多数据时,请参见下文

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

  • 应用程序将不再发送任何数据:
    shutdown(sock,shutw)
    。在这种情况下,内核将向对等方发送一个FIN,以便发出信号,不再有更多的数据跟随。从对等方读取将返回EOF
  • 应用程序不希望接收更多数据:
    shutdown(sock,shuth\u RD)
    。在这种情况下,最初不会向对等方发送任何信息,但如果从对等方接收到数据,则会使用RST拒绝这些信息

因此,调用
close()
相当于同时关闭连接的两侧(
shuth RDWR
)。

请详细说明,我不清楚。您使用了大量上下文中不清楚的术语。例如,当你说“双向关闭”时,你的意思是每一方都调用
close
?或者你是说TCP连接的两个方向(它是一个双向流,对吗?)都被关闭了?当你说“半封闭”时,你的意思是一侧封闭了河流的两个方向吗?或者你的意思是一边已经关闭了发送方向,但接收方向仍然打开?你的问题充满了模糊的术语,使你无法理解你在问什么。而且,更模糊的术语,“启动关闭”是否意味着它调用
close
?或者,这是否意味着它调用
shutdown
来表示它将不再发送?还是别的什么?