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);
}
}

...全文
68 1 点赞 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
coderchenjingui 2013-05-31
我遇到的问题和楼主的一模一样,help。
  • 打赏
  • 举报
回复
相关推荐
发帖
Linux/Unix社区
加入

2.1w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2013-01-21 12:07
社区公告
暂无公告