【问题标题】:why tcp connection is closed even if I didn't use close( ) function?为什么即使我没有使用 close() 函数也会关闭 tcp 连接?
【发布时间】:2014-09-19 18:13:06
【问题描述】:

我使用 ctrl+c 来终止套接字程序,而不是 close() 函数。 TCP连接可以在一段时间后关闭。内核如何处理这种情况?我以为只有 close() 函数才能关闭 tcp 连接。

【问题讨论】:

  • 您没有指定操作系统。但一般来说,操作系统会在终止时代表它清理进程的操作系统分配的资源。
  • 认为套接字实现(如 WinSock)将检测到应用程序不再运行(例如通过引用计数),并将终止套接字。

标签: sockets tcp


【解决方案1】:

您可以关闭套接字。对等方可以关闭连接。

【讨论】:

    【解决方案2】:

    我以为只有 close() 函数才能关闭 tcp 连接。

    为什么会这样? TCP 是一种软件定义的协议。操作系统可以随心所欲地实现它。所有明智的操作系统都会清理已终止进程正在使用的所有资源。套接字也将关闭。如果没有进程在使用 TCP 连接并且没有进程可以使用它(因为最后一个句柄被破坏),那么 TCP 连接会有什么好处?如果没有人可以读取或写入连接,那么保持连接是没有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2021-02-07
      相关资源
      最近更新 更多