免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345678
最近访问板块 发新帖
楼主: cookis
打印 上一主题 下一主题

epoll 边缘触发模式的问题 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
71 [报告]
发表于 2009-02-03 18:23 |只看该作者
就是说 epoll只会触发一次可读事件, 你说的“再读一次”是谁告诉你可读的? 关闭事件在epoll/select中也是可读事件,既然刚才已经处理了这个合并了的可读事件,那么它的状态不会再改变了(边缘触发的特性)也就不会再被唤醒了。

论坛徽章:
0
72 [报告]
发表于 2009-02-04 09:49 |只看该作者
楼主,你再看看39楼wishel 同志的发言,我觉得他的说法是有道理的:

即et模式下,通知你一次EPOLLIN事件,不代表这次事件就只是客户端发送了一些数据,还有可能出现
我昨天说的情况,即: 客户端发送了一些数据后,直接调用close关闭了socket

这样,数据和fin同时到达server端,于是server端只通知了你一个EPOLLIN事件,你调用:

read(fd, buff, 1024); 后,读到了100字节, 然后,你再调用read一次,会发现read返回了0,就说明
客户端已经关闭了

也就是说: 在不考虑客户端拔网线这样的情况下(即只考虑客户端正常close后,server端正常收到了fin这种情况)
server端总是可以检测到client端主动关闭连接了的

论坛徽章:
0
73 [报告]
发表于 2009-02-04 10:00 |只看该作者
to 楼主:

再帮兄弟看看这个问题

http://bbs.chinaunix.net/thread-1361935-1-1.html
(不知道EPOLLOUT到底是什么含义)

论坛徽章:
0
74 [报告]
发表于 2011-11-17 16:32 |只看该作者
论坛里老帖子还真有含金量啊。这个不错。
我来挖坟,man里面Q&A有一条。
       Q7     If  more  than  one event occurs between epoll_wait(2) calls, are they combined or reported separately?

       A7     They will be combined.

现在答案明了了吧

论坛徽章:
0
75 [报告]
发表于 2012-04-08 19:22 |只看该作者
timespace 发表于 2008-11-07 23:33
man epoll也提到这一点,POSIX.1采用BSD处理被中断系统调用的方法,当read被中断也可能返回部分数据,Li ...
终于找到解决一个连接接收大量数据,导致其它饿死的方案了。这种方法不错,由程序逻辑自己控制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP