epoll_event ev;
/*注册事件,放入ev中*/
ev.data.fd = server.get_sock();
/*消息进来,边缘触发*/
ev.events = EPOLLIN | EPOLLET;
epoll_ctl(epfd, EPOLL_CTL_ADD, server.get_sock(), &ev);
水平触发LT
ev.events = EPOLLIN;
默认即为,水平触发
边缘触发ET
ev.events = EPOLLIN | EPOLLET;
区别:
- 边缘触发 是指每当状态变化时发生一个io事件;
- 条件触发 是只要满足条件就发生一个io事件;
详细说明:
当来了100字节的消息,两种设置方法都会触发一个IO事件。
如果只读取了50字节,对于条件触发来说,还是满足可读条件,会继续触发事件。
对于边缘触发来说,已经不会发生状态改变,所以不会再继续触发消息。
状态变化,比如从不可读变为可读
满足条件,有可读的数据