Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7263649
  • 博文数量: 512
  • 博客积分: 12019
  • 博客等级: 上将
  • 技术积分: 6857
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-01 16:46
文章分类

全部博文(512)

文章存档

2024年(2)

2022年(2)

2021年(6)

2020年(59)

2019年(4)

2018年(10)

2017年(5)

2016年(2)

2015年(4)

2014年(4)

2013年(16)

2012年(47)

2011年(65)

2010年(46)

2009年(34)

2008年(52)

2007年(52)

2006年(80)

2005年(22)

分类: LINUX

2010-02-20 17:43:02


以下描述都是站在服务器角度看的
ET方式下: 如果有数据 进入(也就是对应客户单的send),则触发事件。如果服务器没有读取完毕,也不再通
          知。当然后续如果有继续的send或者关闭 请求,将还会通知。要理解缓冲区的变化,或者socket
           状态变化。
         在此事件通知 是指对应描述符socket状态的变化时候触发的。比如有数据进出,或者关闭。
         所谓状态变化,主要是对方在该socket描述符上的操作(send,close等)
   
    EPOLLOUT是只有写缓冲区时候返回写事件,所以当写缓存未满时候,设置了EPOLLOUT,则可发出写入事件。


LT方式下: 只要缓冲区内有数据就继续通知
         在此 事件通知是指socket描述对应的缓冲区内有无数据触发的。比如数据没有读完。当然通讯对方
         有新的数据进下入也触发。



在ET模式下 测试发现,协议栈发了EPOLLIN事件后,并不是说,对方发送的数据都已经到位就绪,可能还没有完成,
所以在这种情况下会发生EAGAIN错误,此时可不用理睬,继续读取即可,知道读到指定长度或者标志位为止。这点如同EINTR错误一样。 当然最好的方式是重新设置EPOLLIN,epoll_ctl(g_epfd,EPOLL_CTL_MOD,pInfo->socketfd,&ev);比如在读取指定长度时候 只要记住上次剩下的长度即可
文件:httpapi.tar.gz
大小:34KB
下载:下载

继续中。。。。。。

阅读(1745) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~