使用epoll_create1()而不是epoll_create()有什么好处?

时间:2012-04-04 12:38:18

标签: c asynchronous network-programming epoll

我正在重写一个多线程Linux-2.6.32 +应用程序,用select替换epoll

epoll_create1(2)的手册页声明:

  

如果flags为0,则除了删除过时的大小参数这一事实外,epoll_create1()与epoll_create()相同。

然而,epoll_wait(2)maxevents使用的过时的大小参数不是epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout); 吗?

epoll_create1

这意味着在使用epoll时我们可以避免在epoll_wait中声明最大数量的事件,但在调用epoll_create1时我们迟早会引用它?如果是这样,将{{1}}带入游戏的重点是什么?

感谢您对此主题的启发。

2 个答案:

答案 0 :(得分:7)

不,使用epoll_waitmaxevents会告诉您返回的最大事件数。它与内核中维护的事件数无关。

较旧版本的epoll_create使用大小来设置某些限制,但不再使用它,因此size参数已过时的注释。

使用epoll_create1的优点是它允许您指定标志,我认为这些标志目前仅限于close-on-exec(以便在exec时自动关闭文件描述符另一个过程)。

答案 1 :(得分:2)

epoll_create1()提供了设置标志的方法。现在无需设置大小。

实际上在内核源代码中:/fs/eventpoll.c

SYSCALL_DEFINE1(epoll_create, int, size)
{
    if (size <= 0)
        return -EINVAL;

    return sys_epoll_create1(0);
}

epoll_wait()参数max_events用于控制返回fd计数而不是整个eventpoll结构中的总fd计数