epoll
epoll查字典没有实际意思,是一种功能的名称。epoll实际上代表一种I/O事件操作,在Linux内核中实现I/O多路复用。
epoll_event
在项目中,会使用epoll_event设置结构体类型,temp在代码中配合epoll_create、epoll_ctl、send、accpet等等函数和文件描述符fd、地址结构体来实现通信。
标识清楚epoll_event的所有成员。
struct epoll_event temp;
struct epoll_event{
_uint32_t events,
epoll_data_t data,
};
/** epoll_event.events=
EPOLLIN:表示对应的文件描述符可以读;
EPOLLOUT:表示对应的文件描述符可以写;
EPOLLPRI:表示对应的文件描述符有紧急的数可读;
EPOLLERR:表示对应的文件描述符发生错误;
EPOLLHUP:表示对应的文件描述符被挂断;
EPOLLET :ET的epoll工作模式;
*/
typedef union epoll_data{
void *ptr,
int fd,
_uint_32_t u32,
_uint_64_t u64,
}epoll_data_t;
在代码中就需要设置events的值和文件描述符fd。
另外还有使用epoll_create、epoll_ctl这类函数。
//size代表文件描述符的最大个数,不能为0
//返回值为整型的文件描述符形参epfd
int epoll_create(int size) 创建一个epoll实例
//epfd代表epoll实例
//op代表操作选项,EPOLL_CTL_ADD注册、EPOLL_CTL_MOD修改、EPOLL_CTL_DEL删除
//fd代表打开的流,需要关联的文件描述符
//*event代表需要关联的结构体
//返回值为0,失败返回-1
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) 对epoll实例进行操作
//epfd代表epoll实例
//event代表需要关联的结构体
//maxevents代表最大events个数
//timeout代表最大运行ms,设置可为-1,0,1,……
//返回值events个数,失败-1
int epoll_wait(int epfd, struct epoll_event *event, int maxevents, int timeout) 等待通信阻塞