#include <sys/epoll.h>
int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
epoll_wait() 系统调用等待由文件描述符 epfd 引用的 epoll 实例上的事件。events 指针指向的内存包含对调用者有效的事件。当达到 maxevents 时 epoll_wait() 会返回,其中 maxevents 参数必须大于零。
调用等待最长时间是 timeout 毫秒。指针 timeout 为 -1 让 epoll_wait() 无限期地等待,若指定 timeout 为零时即使在没有事件有效 epoll_wait() 也会立即返回(返回值是零)。
epoll_wait() 在内核版本 2.6 加入。glibc 从版本 2.3.2 开始支持。
常规的epoll用法伪码如下:
# 伪码
while (1) {
len = epoll_wait();
for (i 1:len) {
if (events[i]) {
recev(); # 内核态数据拷贝到用户态,同步阻塞
do_something();
}
}
}