免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2249 | 回复: 7

epoll用于监听fd时,是否用LT更合适? [复制链接]

论坛徽章:
0
发表于 2010-03-24 14:04 |显示全部楼层
发现很多epoll示例代码都是把监听fd也用ET模式,这样如果在短时间内有大量连接,并且服务器处理一个连接的时间比较长的时候,后面的连接就可能没有机会报上来了。

论坛徽章:
323
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
发表于 2010-03-24 14:12 |显示全部楼层
一直accept到没有为止就可以了

论坛徽章:
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
发表于 2010-03-24 15:57 |显示全部楼层
accept()之后需要很多操做么?

论坛徽章:
0
发表于 2010-03-24 16:07 |显示全部楼层
epoll用ET模式的话都是直接while套着accept用的

论坛徽章:
0
发表于 2010-03-24 16:08 |显示全部楼层
没用EPOLL,SELECT也一样。

论坛徽章:
0
发表于 2010-03-24 16:10 |显示全部楼层
回复 1# tajial


    就算是再长的连接也就是触发一下accept,然后再检测fd是否可读就可以了,楼主的意思是每个连接有大量数据吗?如果有大量数据,就不如用用poll了。

论坛徽章:
0
发表于 2010-03-24 16:28 |显示全部楼层
监听fd是否可读是查看ack完成队列; 而读写fd是查看socket buffer,两者本质是一样的.
处理方式同2楼, 另外记得把监听fd设成nonblocking.

论坛徽章:
0
发表于 2010-03-24 16:45 |显示全部楼层
感谢各位回复
我是看到示例代码是用ET模式,然后处理连接的时候也只是accept一下就退出了,感觉这样可能会有问题
自己写了一段代码试了一下,多个客户端同时连接,在服务端accept成功之后sleep一秒,果然后续就检测不到其他连接了

btw,如果对监听fd用LT,新建立的连接用ET,用同一个epoll描述字检测,这种使用方法有问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP