Linux EPOLLERR的含义来自带有管道的epoll_wait

Linux EPOLLERR的含义来自带有管道的epoll_wait,linux,epoll,Linux,Epoll,这与问题类似,但与管道有关。如果epoll_wait为管道的写入端返回EPOLLERR,如何区分已关闭管道的读取端和一般错误情况?对于sockets案例,答案是使用“使用getsockopt和SO_ERROR获取挂起的错误”,并将其与eppe进行比较。但是,由于Linux上由管道(2)创建的管道或通过打开命名管道返回的管道不是套接字,我应该为管道使用什么API?除了关闭另一端之外,epoll不会检测到管道写入端的任何错误。实际调用write()时可能出现的少数错误无法事先知道(例如,如果传递了无

这与问题类似,但与管道有关。如果epoll_wait为管道的写入端返回EPOLLERR,如何区分已关闭管道的读取端和一般错误情况?对于sockets案例,答案是使用“使用getsockopt和SO_ERROR获取挂起的错误”,并将其与eppe进行比较。但是,由于Linux上由管道(2)创建的管道或通过打开命名管道返回的管道不是套接字,我应该为管道使用什么API?

除了关闭另一端之外,epoll不会检测到管道写入端的任何错误。实际调用write()时可能出现的少数错误无法事先知道(例如,如果传递了无效的缓冲区指针),因此epoll无法检测到它们。因此,如果epoll告诉您有一个错误,那就是EPIPE


(好的,实际上还有另一种可能的错误情况,但它只能由编程错误触发:如果关闭文件描述符,然后在列表中使用epoll_wait,我不知道epoll会如何反应)

“如果关闭文件描述符,然后在列表中使用epoll_wait,我不知道epoll会如何反应。”在我的Linux epoll(7)手册页中,它说“只有在所有引用基础打开文件描述的文件描述符关闭后,才会从兴趣列表中删除文件描述符。”