1

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

有什么方法可以检测到破损的管道吗?

谢谢!

4

2 回答 2

1

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

struct sigaction act;

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

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

于 2010-02-05T07:12:54.973 回答
1

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

于 2010-02-05T11:02:51.563 回答