struct epoll_event
一般是在 <sys/epoll.h>
头文件中定义
struct epoll_event {
uint32_t events; // epoll 事件类型,包括可读,可写等
epoll_data_t data; // 用户数据,可以是一个指针或文件描述符等
};
其中,events
字段表示要监听的事件类型,可以是以下值之一:
EPOLLIN
:表示对应的文件描述符上有数据可读EPOLLOUT
:表示对应的文件描述符上可以写入数据EPOLLRDHUP
:表示对端已经关闭连接,或者关闭了写操作端的写入EPOLLPRI
:表示有紧急数据可读EPOLLERR
:表示发生错误EPOLLHUP
:表示文件描述符被挂起EPOLLET
:表示将epoll设置为边缘触发模式EPOLLONESHOT
:表示将事件设置为一次性事件
data
字段表示用户数据,它的类型是一个union,可以存放一个指针或文件描述符等数据。它的定义如下:
typedef union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
其中,ptr
可以指向任何类型的用户数据,fd
表示文件描述符,u32
和u64
分别表示一个32位和64位的无符号整数。使用时,用户可以将自己需要的数据存放到这个字段中,当事件触发时,epoll系统调用会返回这个数据,以便用户处理事件。