- 论坛徽章:
- 1
|
server端:
ev.data.fd=connfd;
ev.events=EPOLLIN|EPOLLOUT|EPOLLET;
epoll_ctl(epfd,EPOLL_CTL_ADD,connfd,&ev);
while(1)
{
nfds=epoll_wait(epfd,events,20,500);
for(i=0;i<=nfds;i++)
{
if(events.events&EPOLLIN)
{
recv(events.data.fd,line,5,0);
.........
}
else if(events.events&EPOLLOUT)
{
do_process();
}
}
}
上面的epoll在ET模式下运行,现在假设client 发送 10个字节过来,server端引发EPOLLIN事件,但是server端只是读取了5个字节
就不做读取了,过了3秒后,假如client端 再发送10个字节过来,server端还能引发EPOLLIN事件吗?
我的看法是,不能,因为ET只有在缓冲区没有数据的情况下,EPOLLIN事件才会再次触发,但在这个例子里,因为只读了5个字节,还有5个字节在缓冲区里,所以即使client端 再发送10个字节过来,server端还是不能引发EPOLLIN事件的
不知大家的意见如何?
[ 本帖最后由 chenzhanyiczy 于 2008-10-7 15:14 编辑 ] |
|