个人主页:Lei宝啊
愿所有美好如期而遇
目录
epoll简介
Linux2.6下公认性能最好的多路转接方法。
epoll接口
epoll_create() creates a new epoll(7) instance. Since Linux 2.6.8, the size argument is ignored, but must be greater than zero;
这句话的意思是,Linux2.6.8后,这个函数的参数size就被忽略了,但是他的大小必须大于0。这个系统调用是用来创建epoll模型的,至于什么是epoll模型,下面的工作原理那里我们说。他的返回值是一个文件描述符。
我们先不说为什么,只先说用法,为什么下面说。
第一个参数,就是epoll_create的返回值,第二个参数可以有如下取值:
- EPOLL_CTL_ADD,添加,将使OS监管fd下的event事件
- EPOLL_CTL_DEL,删除,使OS不再监管fd下的event事件,此时第三个参数可以为nullptr
- EPOLL_CTL_MOD,修改。
第三个参数,事件集合,将你需要让OS监管的事件填入,有如下值:
- EPOLLIN : 表示对应的文件描述符可以读 (包括对端 SOCKET 正常关闭);
- EPOLLOUT : 表示对应的文件描述符可以写;
- EPOLLPRI : 表示对应的文件描述符有紧急的数据可读 (这里应该表示有带外数据到来);
- EPOLLERR : 表示对应的文件描述符发生错误;
- EPOLLHUP : 表示对应的文件描述符被挂断;
- EPOLLET : 将 EPOLL 设为边缘触发(Edge Triggered)模式, 这是相对于水平触发(Level Triggered)来说的
- EPOLLON