根据您正在做的事情的方式,您可能必须处理SIG_PIPE
,当连接被任意断开时可能会发生这种情况。
您不必处理任何其他信号。
如果您使用select()
orpoll()
或(个人喜好)epoll()
,您应该检查错误(例如,POLLHUP
,您应该在检查读/写可用性之前) 。
您还应该始终检查read()/write()/send()/recv()
. 如果有错误,则返回-1,但如果返回0,则表示另一端断开连接。即,读取 0 确实意味着读取了 0 个字节,但连接仍然良好。它不是。关闭插座。这是 POSIX 规定的。