最近在学习epoll用法,一直没太搞明白。
网上提到 “ET(edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了”。
编写代码测试了一下:
如果客户端发送100字节,服务器每次只读取10字节,如果epoll_wait设置了超时并且客户端没有再发送数据,到达超时时间后还会有IN事件触发,如果设置了永不超时(epoll_wait(epfd,events,20,-1)),并且客户端不再发送数据就不会产生IN事件。如果客户端继续发送数据会产生IN事件或者服务器再次mod IN事件就会有IN事件到达,这样可以读取没有读完的数据。