【问题标题】:What happen, when epoll file descriptor is closed?当 epoll 文件描述符关闭时会发生什么?
【发布时间】:2014-12-20 05:29:44
【问题描述】:

假设我通过调用创建 epoll 文件描述符(epfd)

epfd = epoll_create( 10 );

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

如果我在 epoll 集不为空且 epoll_wait(epfd,...) 正在进行时关闭 epfd(通过在线程中调用 close(epfd),而不是 epoll_wait 线程)会发生什么? epoll_wait 是否终止?结果是什么?

【问题讨论】:

    标签: epoll


    【解决方案1】:

    可以预见的是,Linux 和select(2) 做的事情是一样的。从手册页:

    讨论如果 epoll 中的文件描述符可能会发生什么 epoll_wait() 监控的实例在另一个线程中关闭, 见select(2)

    select(2) 页面:

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

    tl;博士;是“不要这样做”:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2011-06-18
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 2012-04-08
      相关资源
      最近更新 更多