本文主要是介绍Linux中epoll的ET模式和LT模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
epoll的LT模式和ET模式
1 epoll的默认是LT模式,在这个模式下,若读数据一次性没有读完,缓冲区中还有可读数据,则epoll_wait会再次通知。
例如让read函数每次读两个,发送1122334455,会连续读6次,回车也算一次。
2 若将epoll设置为ET模式,若读数据的时候没有一次性读完,则epoll_wait不再通知,直到下次有新的数据发来,才继续读剩下的数据。
如何设置:在上树的时候
struct epoll_event event;
event.events= EPOLLIN | EPOLLET;
event.data.fd=cfd
int epoll_ctl(epfd,EPOLL_CTL_ADD,cfd,&event);
思考:
1 在ET模式下,如何在epoll_wait返回一次的情况下读完数据?
在while循环里嵌套read函数,循环读数据,但是读完数据后,会一直阻塞在read函数处
2 应该如何解决阻塞?
将通信文件描述符,设为非阻塞,让read对此文件描述符 读完数据后不阻塞,直接返回,返回值为-1 ;
如何设置:
int flag=fcntl(cfd,FD_GETFL);
flag |= O_NONBLOCK;
fcntl(cfd,FD_SETFL,flag);
这篇关于Linux中epoll的ET模式和LT模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!