epoll man手册解读
1.epoll_create()
1.1.概要
#include <sys/epoll.h>
int epoll_create(int size);
int epoll_create1(int flags);
1.2.描述
epoll_create()
epoll_create()创建一个epoll“实例”,size参数目前被忽略。
epoll_create()返回一个引用新的epoll实例的文件描述符。
当不再需要时,应该使用close()关闭epoll_create()返回的文件描述符。
epoll_create1()
如果falgs为0,epoll_create1()与epoll_create()相同。
标志中可以包含以下值以获得不同的行为:
EPOLL_CLOEXEC
在新的文件描述符上设置关闭执行(FD_CLOEXEC)标志。 有关这可能有用的原因,请参阅open(2)中的O_CLOEXEC标志的描述。
1.3.返回值
成功时:返回一个非负文件描述符;
错误时:返回-1,并将errno设置为指示错误。
1.4.错误
EINVAL size设置出错。
2.epoll_wait()
2.1.概要
#include <sys/epoll.h>
int epoll_wait(int epfd, struct epoll_event *events,
int maxevents, int timeout);
int epoll_pwait(int epfd, struct epoll_event *events,
int maxevents, int timeout,
const sigset_t *sigmask);
2.2.描述
epoll_wait()
epoll_wait()系统调用等待文件描述符epfd引用的epoll实例上的事件。
maxevents参数必须大于零。
该调用超时等待时间为timeout毫秒。
timeout为-1时,会使epoll_wait()无限期地等待;
timeout为 0时,即使没有可用的事件(返回码等于零),epoll_wait()也会立即返回。
struct epoll_event定义如下:
typedef union epoll_data
{
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
struct epoll_event
{
uint32_t events; /* epoll事件 */
epoll_data_t data; /* 用户数据变量 */
};
The data of each returned structure will contain the same data
the user set with an epoll_ctl(2) (EPOLL_CTL_ADD,EPOLL_CTL_MOD)
while the events member will contain the returned event bit field.
event成员可以下面的事件类型进行位运算“|”组成:
EPOLLIN
相关文件可用于read(2)操作。
EPOLLOUT
相关文件可用于write(2)操作。
EPOLLRDHUP(自Linux 2.6.17开始)
流套接字对等封闭连接,或关闭写的一半连接。
(这个标志对于编写简单的代码特别有用,在使用边缘触发监视时检测对等体关闭。)
EPOLLPRI
有可用于read(2)操作的紧急数据。
EPOLLERR
关联的文件描述符发生错误情况。
epoll_wait(2)总是等待这个事件; 没有必要将它设置为事件。
EPOLLHUP
在相关的文件描述符上发生挂起。
epoll_wait(2)总是等待这个事件; 没有必要将它设置为事件。
EPOLLET
设置相关文件描述符的边缘触发行为。
epoll的默认行为是水平触发级别。
有关Edge和Level Triggered事件分布架构的更多详细信息,请参阅epoll(7)。
EPOLLONESHOT(自Linux 2.6.2起)
设置相关文件描述符的单次行为。
这意味着在用epoll_wait(2)提取事件之后,相关的文件描述符被内部