【问题标题】:C++ : how to close a tcp socket (server) when receiving SIGKILLC++:接收 SIGKILL 时如何关闭 tcp 套接字(服务器)
【发布时间】:2023-03-23 22:28:01
【问题描述】:

如何在死前关闭套接字? 我在 linux 上有一个创建 TCP 服务器的服务。有时我必须重新启动它,我希望套接字真正关闭。目前它挂起。 我也知道 SIGKILL 无法处理。 谁能指出我正确的方向?

【问题讨论】:

    标签: c++ sockets tcp sigkill


    【解决方案1】:

    套接字将被关闭 - 操作系统会自动执行此操作,请参阅:Using SO_REUSEADDR - What happens to previously open socket?

    与其尝试处理不起作用的SIGKILL,不如在开始时解决问题:

    使用SO_REUSEADDR 套接字选项,它允许您立即重用端口。

    【讨论】:

    • 非常感谢。我加了:int optval=1; setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof optval);
    【解决方案2】:

    你不能在 SIGKILL 上做任何事情。您应该尝试处理 SIGTERM 和/或 SIGINT 来终止您的服务并关闭套接字。

    没有必要发送 SIGKILL 除非

    1. 应用程序忽略 SIGTERM 和 SIGINT
    2. 系统确实需要立即终止应用程序

    当你想重启你的服务时,你应该发送 SIGTERM 或 SIGINT 而不是 SIGKILL。

    【讨论】:

    • 好的,我向 SIGINT 添加了一个处理程序(尚未处理 SIGTERM)。我使用从新贵重新启动来停用并重新激活服务器。
    猜你喜欢
    • 2020-09-17
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    • 2017-01-27
    • 2021-12-12
    相关资源
    最近更新 更多