2012-05-06 68 views

回答

2

取决于你如何做你正在做什么,你可以处理SIG_PIPE,当连接任意打破它可以发生。

你不应该处理任何其他信号。

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

您还应该经常检查返回值read()/write()/send()/recv()。如果有错误,则返回-1,但如果它们返回0,则意味着另一端断开连接。也就是说,读取0只意味着读取了0个字节,但连接仍然良好。事实并非如此。关闭插座。这由POSIX规定。

+0

我问过这个问题,因为在我的代码的第一个版本中,当服务器发生分段错误时,客户端进入无穷大循环...... 所以在这种情况下,客户端也收到一个SIG_PIPE? – giozh

+0

@SvenMarnach我已经在双方使用超时(只使用alarm()函数),但我想知道是否有其他类型的信号来处理:) – giozh

+0

@SvenMarnach:如果你不得不求助于超时或线程你做错了什么。 – delicateLatticeworkFever