0
我需要在服务器和客户端的AF_INET套接字中处理哪种信号?C unix套接字。信号处理
我需要在服务器和客户端的AF_INET套接字中处理哪种信号?C unix套接字。信号处理
取决于你如何做你正在做什么,你可以有处理SIG_PIPE
,当连接任意打破它可以发生。
你不应该处理任何其他信号。
如果您正在使用select()
或poll()
或(个人喜好)epoll()
你应该检查错误(例如,POLLHUP
)您检查读/写可用性之前。
您还应该经常检查返回值read()/write()/send()/recv()
。如果有错误,则返回-1,但如果它们返回0,则意味着另一端断开连接。也就是说,读取0只意味着读取了0个字节,但连接仍然良好。事实并非如此。关闭插座。这由POSIX规定。
我问过这个问题,因为在我的代码的第一个版本中,当服务器发生分段错误时,客户端进入无穷大循环...... 所以在这种情况下,客户端也收到一个SIG_PIPE? – giozh
@SvenMarnach我已经在双方使用超时(只使用alarm()函数),但我想知道是否有其他类型的信号来处理:) – giozh
@SvenMarnach:如果你不得不求助于超时或线程你做错了什么。 – delicateLatticeworkFever