linux下C++ socket网络编程( 六 )

3)epoll有两种工作方式 , LT(Level triggered) 水平触发 、ET(Edge triggered)边沿触发 。 LT是select/poll的工作方式 , 比较低效 , 而ET是epoll具有的高速工作方式 。

Epoll 用法(三步曲):

第一步:int epoll_create(int size)系统调用 , 创建一个epoll句柄 , 参数size用来告诉内核监听的数目 , size为epoll支持的最大句柄数 。

第二步:int epoll_ctl(int epfd int op int fd struct epoll_event *event) 事件注册函数

参数 epfd为epoll的句柄 。 参数op 表示动作 三个宏来表示:EPOLL_CTL_ADD注册新fd到epfd 、EPOLL_CTL_MOD 修改已经注册的fd的监听事件、EPOLL_CTL_DEL从epfd句柄中删除fd 。 参数fd为需要监听的标识符 。 参数结构体epoll_event告诉内核需要监听的事件 。

第三步:int epoll_wait(int epfd struct epoll_event * events int maxevents int timeout) 等待事件的产生 , 通过调用收集在epoll监控中已经发生的事件 。 参数struct epoll_event 是事件队列 把就绪的事件放进去 。

推荐阅读