【发布时间】:2013-07-16 16:43:37
【问题描述】:
我目前正在使用 kqueue 来处理服务器进程中每个线程的多个客户端 所以我不希望在出现信号 SIGPIPE 时终止线程,我只想从 kqueue 中删除相应的 socked id。 所以我的问题是:有没有办法在 Signalhandle 中获取相应的 socketid 并将其解析回进程以将其从事件 kqueue 中删除,或者我是否需要 SIG_IGN SIGPIPE 并通过从发送返回 -1 来处理删除?它会在超时时间后返回 -1 值还是立即返回 send -1?
最后,如果信号忽略是我的解决方案:id 的声明必须放在哪里
typedef void (*sig_t) (int);
sig_t
signal(int sig, sig_t func);
它必须在主函数中吗? 还是在相应线程的开头?还是作为全局元素?
【问题讨论】:
-
对
send()的结果做出反应至少更便携,所以对我来说这似乎是更好的方法。无论如何,我很好奇是否有人有答案(+1)。 -
好吧,也许我又把我的问题表达得很糟糕了,但就我打算使用 send() 的返回而言,我只是想知道,我必须把 sig_t 信号(SIGPIPE,SIG_IGN)放在哪里;让信号被忽略。