epoll的优点在于可以支持大量的文件描述符
epoll相关的系统调用:
int epoll_create(int size);
参数size的含义我至今没搞懂,如果大家有谁准确的知道的话请一定要留言!
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
epoll_wait在每一帧中都会别检查指定的epfd上发生的事件,并且返回到events中,另外事件数量nev作为返回值返回。
事件(部分)有:
EPOLLIN 可读事件
EPOLLOUT 可写事件
EPOLLRDHUP 对端关闭了套接字或者是关闭了写通道(close(fd)或shutdown(fd, SHUT_WR))。
EPOLLPRI 有紧急数据可读。
EPOLLERR 当文件描述符发生错误的时候,这个epoll总是会帮你设置好这个事件,所以你不需要再设置。
timeout的单位是毫秒。
需要注意的是epoll_wait会受到信号的干扰。
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
epoll_wait的控制码:
EPOLL_CTL_ADD:将文件描述符绑定到epfd。
EPOLL_CTL_DEL:解除epfd和文件描述符之间的绑定。
EPOLL_CTL_MOD:修改某个文件关心的事件。