在SIGPIPE清理

sec*_*ask 1 c linux signals

我有一个共享多个线程的套接字连接池,应该从池中删除死连接,问题是我不知道哪个死了来自SIGPIPE sighandler,在这种情况下有什么建议吗?

Jon*_*ler 5

解决这个问题的一种方法是忽略SIGPIPE.这意味着你的写操作(write,sendmsg等等)将返回错误,只要你注意错误返回,你就会知道哪个文件描述符失败 - 因为一切都是同步的.

  • 您可以自己忽略信号:`signal(SIGPIPE,SIG_IGN);`.然后,除非图书馆决定篡夺您的信号处理,否则它将收到错误,其中(一个信任)将报告给您的调用代码.如果图书馆无法处理这个问题,也许你需要一个更好的图书馆.坦白说,无论如何应该为你处理它...... (2认同)