epoll测试

扫码查看

以下描述都是站在服务器角度看的
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);比如在读取指定长度时候 只要记住上次剩下的长度即可
epoll测试-LMLPHP
文件:httpapi.tar.gz
大小:34KB
下载:下载

继续中。。。。。。

11-06 10:58
查看更多