当epoll文件描述符关闭时会发生什么?

时间:2014-10-24 11:17:23

标签: epoll

假设我通过调用

创建epoll文件描述符(epfd)
epfd = epoll_create( 10 );

接下来,我通过调用epoll_ctl(epfd,EPOLL_CTL_ADD,...)将一些文件描述符添加到此集合中,并通过在单独的线程中调用epoll_wait来等待事件循环中的事件。

当epoll set不为空且epoll_wait(epfd,...)正在进行时,如果我关闭epfd(通过调用close(epfd)在线程中,除了epoll_wait线程之外)会发生什么? epoll_wait终止了吗?结果如何?

1 个答案:

答案 0 :(得分:1)

可以预见,Linux与select(2)的功能相同。从手册页:

  

有关epoll中文件描述符可能发生的事情的讨论   由epoll_wait()监控的实例在另一个线程中关闭,   见select(2)

来自select(2)页面:

  

如果select()监视的文件描述符在另一个文件描述符中被关闭   线程,结果未指定。 [...]在Linux上(以及其他一些   系统),关闭另一个线程中的文件描述符没有任何效果   在select()

tl; dr;是不是这样做的":

  

总之,依赖于特定行为的任何应用程序   这种情况必须被认为是错误的