【发布时间】:2023-03-23 22:28:01
【问题描述】:
如何在死前关闭套接字? 我在 linux 上有一个创建 TCP 服务器的服务。有时我必须重新启动它,我希望套接字真正关闭。目前它挂起。 我也知道 SIGKILL 无法处理。 谁能指出我正确的方向?
【问题讨论】:
如何在死前关闭套接字? 我在 linux 上有一个创建 TCP 服务器的服务。有时我必须重新启动它,我希望套接字真正关闭。目前它挂起。 我也知道 SIGKILL 无法处理。 谁能指出我正确的方向?
【问题讨论】:
套接字将被关闭 - 操作系统会自动执行此操作,请参阅:Using SO_REUSEADDR - What happens to previously open socket?
与其尝试处理不起作用的SIGKILL,不如在开始时解决问题:
使用SO_REUSEADDR 套接字选项,它允许您立即重用端口。
【讨论】:
int optval=1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval);
你不能在 SIGKILL 上做任何事情。您应该尝试处理 SIGTERM 和/或 SIGINT 来终止您的服务并关闭套接字。
没有必要发送 SIGKILL 除非
当你想重启你的服务时,你应该发送 SIGTERM 或 SIGINT 而不是 SIGKILL。
【讨论】: