以下描述都是站在服务器角度看的
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) |