epoll的EPOLLLT模式和EPOLLET模式比较

本文详细介绍了epoll的两种工作模式:EPOLLLT和EPOLLET。EPOLLLT为默认模式,适用于大多数场景,能确保数据到达时持续接收到通知。而EPOLLET模式更为高效,但对程序员的要求更高,它只在数据首次到达时通知一次。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

epoll的EPOLLLT模式和EPOLLET模式比较

分类: 网络编程 epoll   105人阅读  评论(0)  收藏  举报

epoll是linux系统最新的处理多连接的高效率模型, 工作在两种方式下, EPOLLLT方式和EPOLLET方式。

EPOLLLT是系统默认, 工作在这种方式下, 程序员不易出问题, 在接收数据时,只要socket输入缓存有数据,

都能够获得EPOLLIN的持续通知, 同样在发送数据时, 只要发送缓存够用, 都会有持续不间断的EPOLLOUT

通知。而对于EPOLLET是另外一种触发方式, 比EPOLLLT要高效很多, 对程序员的要求也多些, 程序员必须

小心使用,因为工作在此种方式下时, 在接收数据时, 如果有数据只会通知一次, 假如read时未读完数据,

那么不会再有EPOLLIN的通知了, 直到下次有新的数据到达时为止; 当发送数据时, 如果发送缓存未满也只有

一次EPOLLOUT的通知, 除非你把发送缓存塞满了, 才会有第二次EPOLLOUT通知的机会, 所以在此方式下

read和write时都要处理好。 暂时写到这里, 留作备忘。

        附加: 如果将一个socket描述符添加到两个epoll中, 那么即使在EPOLLET模式下, 只要前一个epoll_wait时,未读完, 那么后一个epoll_wait事件时, 也会得到读的通知, 但前一个读完的情况下, 后一个epoll就不会得到读事件的通知了。。。。

epoll_event lev;

//epollin表示有数据包过来,epollout表示现在可以发送数据,socket空闲,连接成功后就有这个事件

lev.events = EPOLLIN | EPOLLOUT | EPOLLET;
lev.data.ptr = this
nRetCode = epoll_ctl(hEpoll, EPOLL_CTL_ADD, m_hSocket, &lev);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值