我从SIGPIPE
收到uv_write()
,因为对等方已重置连接。
p/x stream->flags
0x46064
./src/unix/internal.h:# define UV__POLLRDHUP 0x2000
对于BSD阻止SIGPIPE
libuv有:
./src/unix/core.c
#if defined(SO_NOSIGPIPE)
{
int on = 1;
setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, &on, sizeof(on));
}
#endif
Linux没有SO_NOSIGPIPE
作为选项。除了SIGPIPE
signal(SIGPIPE, SIG_IGN);
信号的任何建议
答案 0 :(得分:0)
您必须更新uv_write()
,并使用MSG_NOSIGNAL
标记致电send()
:
如果面向流的套接字上的对等方已关闭连接,则不生成
SIGPIPE
信号。仍会返回EPIPE
错误。这提供了与使用sigaction(2)
忽略SIGPIPE
类似的行为,但是,MSG_NOSIGNAL
是一个每次调用的功能,忽略SIGPIPE
设置一个影响所有线程的进程属性过程
答案 1 :(得分:0)
对你的问题的简短回答是:不,任何处理SIGPIPE
但设置信号处理程序的方法。
有关SO_NOSIGPIPE
和libuv
的讨论,请参阅this issue。它还阐明了为什么存在BSD代码。