【问题标题】:How to release socket?如何释放套接字?
【发布时间】:2012-06-04 19:42:34
【问题描述】:

我正在制作一个小型 tcp 服务器,它通过线程处理许多请求。 当我的服务器关闭时,他会留下未关闭的套接字。 如何在新启动服务器时自动关闭它们或以某种方式释放它们? 插座的数量很大,我不想手动管理它们。

有什么想法吗?

【问题讨论】:

  • 如果你关闭你的应用程序,你持有的所有套接字都将被操作系统关闭。文件描述符在内核中被引用计数,当没有更多的套接字用户时,相关的资源将被释放(TCP套接字完成,文件关闭等)。
  • 你别无选择。除非您使用具有析构函数的语言,否则您必须“手动管理它们”。您的问题不清楚:您是否在谈论处于 TIME_WAIT 状态的 ports

标签: linux sockets tcp pthreads


【解决方案1】:

套接字是在哪里创建的?在新线程内还是在线程启动之前?如果它在线程内,您可以考虑使用 pthread_cleanup_push() 安装一个处理程序,该处理程序在线程退出时关闭套接字(如果它仍然打开)。

【讨论】:

    【解决方案2】:

    当我上次处理套接字时,我以前做的是启动各个线程,每个线程都管理一个套接字,然后分别关闭它们,因此每个线程中的每个变量都包含套接字号。可以使用 close(s) 关闭套接字;其中 s 是套接字。即使当您关闭程序时,套接字也会由运行时释放,但最好关闭套接字以便其他程序可以使用它们。

    【讨论】:

      猜你喜欢
      • 2015-09-15
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多