libuv如何在peer(linux)

时间:2017-06-14 18:20:54

标签: sockets libuv

我从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

以外,如何处理Linux的signal(SIGPIPE, SIG_IGN);信号的任何建议

2 个答案:

答案 0 :(得分:0)

您必须更新uv_write(),并使用MSG_NOSIGNAL标记致电send()

  

如果面向流的套接字上的对等方已关闭连接,则不生成SIGPIPE信号。仍会返回EPIPE错误。这提供了与使用sigaction(2)忽略SIGPIPE类似的行为,但是,MSG_NOSIGNAL是一个每次调用的功能,忽略SIGPIPE设置一个影响所有线程的进程属性过程

答案 1 :(得分:0)

对你的问题的简短回答是:不,任何处理SIGPIPE但设置信号处理程序的方法。

有关SO_NOSIGPIPElibuv的讨论,请参阅this issue。它还阐明了为什么存在BSD代码。