epoll et和lt 读取数据问题

dodo_check 2013-01-21 12:07:48
对et和lt不是很清楚,请教一下,如果设MAXLINE是5的话,client 发送一次abcdef 六个字母,
我理解的是如果lt 模式,epoll_wait两次调用成功返回,正确读到数据,
如果是et模式,则会第一次读取abcde,循环到第二次调用epoll_wait时 会阻塞。。但是测试发现et 和 lt都是调用epoll_wait两次成功返回,读到数据。
是不是我想错了?

for ( ; ; ) {
cout << "time:" << time(NULL) <<endl;
//等待epoll事件的发生

nfds=epoll_wait(epfd,events,20,-1);
//处理所发生的所有事件

for(i=0;i<nfds;++i)
{
if(events[i].events&EPOLLIN)
{
cout << "EPOLLIN" << endl;
if ( (sockfd = events[i].data.fd) < 0)
continue;
n = read(sockfd, line, MAXLINE);
cout << "n:" << n << endl;
if ( n < 0) {
if (errno == ECONNRESET) {
close(sockfd);
events[i].data.fd = -1;
} else
std::cout<<"readline error"<<std::endl;
} else if (n == 0) {
close(sockfd);
events[i].data.fd = -1;
}
line[n] = 0;
cout << "read " << line << endl;
//设置用于写操作的文件描述符

ev.data.fd=sockfd;
//ev.events=EPOLLET|EPOLLIN;
ev.events=EPOLLIN;

epoll_ctl(epfd,EPOLL_CTL_MOD,sockfd,&ev);
}
}

...全文
133 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
coderchenjingui 2013-05-31
  • 打赏
  • 举报
回复
我遇到的问题和楼主的一模一样,help。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧