免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8763 | 回复: 6
打印 上一主题 下一主题

epoll默认模式(LT),几乎总是触发EPOLL-OUT事件,怎么解决? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-25 22:31 |只看该作者 |倒序浏览
LINUX中无法更改套接口选项 SO_SNDLOWAT,低水位永远是1字节,导致可写事件经常被触发;频繁将描述符从epoll-fd一进一出是不实际的。大家有什么好的建议吗?

一个想法是:用两个epoll描述符,kpfd_r和kpfd_rw,第一个描述符监视套接口的可读事件;
第二个描述符监视可读可写事件,但是由一个定时器控制;代码大概如下

  1. while ( TRUE )
  2. {
  3.   usleep(2000);// 2 ms
  4.   epoll_wait( kpfd_r, ...,..., 0 ); // non block
  5.   process read events....

  6.   if ( 50ms 定时器到了 )
  7. {
  8.    epoll_wait( kpfd_rw, ...,..., 0 ); // non block
  9.    process read and write events....
  10. }
  11. }
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
2 [报告]
发表于 2010-03-25 22:38 |只看该作者
用epoll_ctl() 来回修改

a better way is use ET

论坛徽章:
0
3 [报告]
发表于 2010-03-25 22:49 |只看该作者
回复 2# xinglp


     已经否决了第一种做法。。。。你没看见吗。。
ET模式不是很熟悉,谢谢提示,我看看

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
4 [报告]
发表于 2010-03-25 22:53 |只看该作者
怎么就否决第一种做法了

论坛徽章:
0
5 [报告]
发表于 2010-03-25 23:23 |只看该作者
EPOLLONESHOT (since kernel 2.6.2)
              Sets  the one-shot behaviour for the associated file descriptor.  This means
              that after an event is pulled out with  epoll_wait(2)  the  associated  file
              descriptor  is  internally  disabled and no other events will be reported by
              the epoll interface. The user must call epoll_ctl(2) with  EPOLL_CTL_MOD  to
              re-enable the file descriptor with a new event mask.

SO_SNDLOWAT是否影响epoll还真没试过,看来楼主是试过了。如下方法可行嘛:
用EPOLLONESHOT,写事件触发,自动禁止此文件描述符,然后需要时再调用epoll_ctl()更新事件。

论坛徽章:
0
6 [报告]
发表于 2010-03-26 11:37 |只看该作者
ET吧,用的比较多

论坛徽章:
0
7 [报告]
发表于 2011-09-14 18:53 |只看该作者
写数据时,直接调用send()发送;只有当send()返回EAGIAN时,才将socket加入EPOLL,等待可写事件后,再发送数据。全部数据发送完毕,再移出EPOLL
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP