Skip to content

Latest commit

 

History

History
39 lines (35 loc) · 1.26 KB

epoll_ctl.md

File metadata and controls

39 lines (35 loc) · 1.26 KB

##函数原型

#include <sys/epoll.h>

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

##参数 ###epfd 是[[epoll_create|epoll_create]]的返回值。 ###op 表示动作,它由三个宏来表示

  • EPOLL_CTL_ADD:注册新的fd到epfd中;
  • EPOLL_CTL_MOD:修改已经注册的fd的监听事件;
  • EPOLL_CTL_DEL:从epfd中删除一个fd;

###fd 要监听的文件描述符 ###event 可以是以下几个宏逻辑或的组合

描述
EPOLLIN 表示对应的文件描述符可以读(包括对端SOCKET正常关闭)
EPOLLOUT 表示对应的文件描述符可以写
EPOLLPRI 表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来)
EPOLLERR 表示对应的文件描述符发生错误
EPOLLHUP 表示对应的文件描述符被挂断
EPOLLET 将EPOLL设为边缘触发(Edge Triggered)模式,这是相对于水平触发(Level Triggered)来说的
EPOLLONESHOT 只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个socket的话,需要再次把这个socket加入到EPOLL队列里

检测event(struct epoll_event类型)是否包含某一标识

if(event & EPOLLHUP){
...
}
if(event & (EPOLLPRI|EPOLLERR|EPOLLHUP)){
...
}