免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2586 | 回复: 3
打印 上一主题 下一主题

[C] epoll触发不了事件? [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-15 17:20 |只看该作者 |倒序浏览
本帖最后由 jd808 于 2010-09-15 17:21 编辑

有时候前端发一串数据,确实发送成功了,但后端的epoll就是检测不到,半天不动,我是用边缘触发模式的,用的ev.events = EPOLLIN | EPOLLOUT | EPOLLET;这3个参数,但我把前端一关掉(断开),后端的事件又被触发了,数据读到了,要怎么解决这个问题呀

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2010-09-15 17:50 |只看该作者
你的应该是没有read到EAGAIN

解决办法:
while (1)
{
    result = recv(fd, buf, bytes_to_recv);
    if (result == -1)
    {
        if (errno == EAGAIN)
            return 0;
        else
        {
            printf("error %s\n", strerror(errno));
            return -1;
         }
    }
    bytes_to_read -= result
}


建议你如果你是学习,先用水平触发试,

论坛徽章:
0
3 [报告]
发表于 2010-09-15 17:55 |只看该作者
建议你还是别用ET模式了,用不好会出问题

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2010-09-15 18:52 |只看该作者
本帖最后由 jd808 于 2010-09-15 19:04 编辑
  1. int my_recv(int fd,char *buffer,int length)
  2. {
  3.         int bytes_left;
  4.         int bytes_read;
  5.         char *ptr;
  6.         ptr=buffer;
  7.         bytes_left=length;
  8.         while(bytes_left>0)
  9.         {
  10.                 bytes_read=recv(fd,ptr,bytes_left,0);
  11.                 if(bytes_read<0)
  12.                 {
  13.                   if(errno==EINTR)
  14.                   {
  15.                          bytes_read=0;
  16.                   }else{
  17.                          return(-1);
  18.                   }
  19.                 }else if(bytes_read==0){
  20.                       break;
  21.                 }

  22.                 bytes_left-=bytes_read;
  23.                 ptr+=bytes_read;
  24.         }
  25.         return(length-bytes_left);
  26. }
复制代码
这是我的读程序 没啥问题吧  而且水平模式也是一样,经常接不到数据,是epoll根本就没发出通知出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP