概念
EPOLL模型有两种方式:
ET:边缘出发,事件只触发一次
LT:水平触发,只有可操作数据,就会一直触发
EPOLL里的几个事件:
EPOLLIN:可读事件,表示套接字上有数据到来,可以读取。或者如果读出来的数据长度是0,表示对端关闭了连接。
EPOLLOUT:可写事件,表示套接字的写缓冲区有空间可写,可以写输入待发送数据。如果写出错,一般是指对端异常关闭了连接,此时可以关闭本地的套接字。
EPOLLHUP:对端关闭了连接,在某些系统上可能不触发。
EPOLLRDHUP:对端关闭了读管道,某些系统上可能不触发。
EPOLLERR:套接字出现异常,需要关闭连接。
枚举和宏
EPOLLET = 1u << 31 : ET模式的定义,没找到LT的定义,默认是LT,只有要使用ET模式才用到此枚举。
/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */
#define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */
#define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */
#define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */
API
int epoll_create (int __size): 创建一个epoll对象,最多处理size个套接字,旧系统需要,2.6之后此参数无意义。
int epoll_ctl (int __epfd, int __op, int __fd,struct epoll_event *__event) : 把一个fd关注的事件绑定到epfd,op指EPOLL_CTL_*
int epoll_wait (int __epfd, struct epoll_event *__events,int __maxevents, int __timeout):等待epfd对象关联的套接字产生网络事件