在Solaris send()调用中检测损坏的管道

时间:2010-02-05 06:42:27

标签: c sockets solaris broken-pipe

在solaris中如何检测send()调用中的断开套接字?我不想使用信号 我尝试了SO_NOSIGPIPE和MSG_NOSIGNAL,但两者在Solaris中都不可用,我的程序因“断管”错误而被杀死。

有没有办法检测破裂的管道?

谢谢!

2 个答案:

答案 0 :(得分:1)

您必须使用sigaction()专门忽略SIGPIPE信号:

struct sigaction act;

act.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &act, NULL);

...然后send()将返回-1,errno设置为EPIPE

答案 1 :(得分:1)

我想在Solaris中你只有有限的选择。咖啡馆建议的AFAIK,sigaction似乎是最好的解决方案。