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

noi*_*eed 8 c asynchronous network-programming epoll

我重写一个多线程的Linux-2.6.32 +应用程序以替换selectepoll.

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);
Run Code Online (Sandbox Code Playgroud)

这意味着当使用epoll时我们可以避免声明最大事件数量,epoll_create1但迟早我们必须在调用时引用它epoll_wait?如果是这样,那么epoll_create1进入游戏的重点是什么?

感谢您对此主题的启发.

pax*_*blo 8

不,有epoll_wait,maxevents告诉您将返回的最大事件数.它与内核中维护的数量无关.

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

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