【问题标题】:C unix sockets. Signals to handleC unix 套接字。要处理的信号
【发布时间】:2012-05-15 05:56:33
【问题描述】:

我必须在 AF_INET 套接字中处理哪种信号,包括服务器端和客户端?

【问题讨论】:

    标签: c sockets unix signals


    【解决方案1】:

    根据您的工作方式,您可能必须处理SIG_PIPE,这可能在连接被任意中断时发生。

    您不必处理任何其他信号。

    如果您使用select()poll() 或(个人偏好)epoll(),您应该检查错误(例如,POLLHUP检查读/写可用性之前。

    您还应该始终检查read()/write()/send()/recv() 的返回值。如果有错误,则返回-1,但如果返回0,则表示另一端断开连接。即,读取 0 确实意味着读取了 0 个字节,但连接仍然良好。它不是。关闭插座。这是 POSIX 规定的。

    【讨论】:

    • 我问过这个问题是因为在我的代码的第一个版本中,当服务器上发生分段错误时,客户端进入无限循环......所以在这种情况下,客户端也收到了 SIG_PIPE ?
    • @SvenMarnach 我已经在双方都使用了超时(仅使用 alarm() 函数),但我想知道是否还有其他类型的信号要处理:)
    • @SvenMarnach:如果你不得不求助于超时或线程,那你就做错了。
    • @giozh:不,SIG_PIPE 不会导致段错误。
    • @goldilocks 我不是说 SIG_PIPE 会导致分段错误!发生在我身上的是服务器因段错误而崩溃,客户端陷入无限循环!我要问的是当服务器进程(我的服务器代码管理客户端/服务器应用程序上的所有连接)崩溃时,客户端是否返回 SIG_PIPE?
    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 2019-11-24
    • 2012-04-30
    • 2016-03-31
    • 1970-01-01
    相关资源
    最近更新 更多