有人听说过没有明显原因的 SIGPIPE 吗?我有一个程序,它与 SIGPIPE 一起崩溃。我用信号(SIGPIPE,SIG_IGN)防止了崩溃;出于好奇,我什么也没做,即没有错误处理。令我惊讶的是,代码运行良好。我通过一个套接字与另一个程序通信。即使在 SIGPIPE 之后,通过套接字的数据传输也能正常工作。这可能吗?SIGPIPE 由于临时网络中断?
问问题
728 次
这就是套接字在 *nixes 上的工作方式。
基本上发生的事情是您在对等方重置的 TCP 套接字上执行了 write()/send() 或类似操作。默认情况下,这将导致终止应用程序的 SIGPIPE 信号。
解决这个问题的常用方法是像您已经完成的那样简单地忽略 SIGPIPE 信号,而是处理来自 write()/send() 的错误返回值。
更多信息可以在这里找到,见章节 2.19 和 2.22