+ -
当前位置:首页 → 问答吧 → epoll触发不了事件?

epoll触发不了事件?

时间:2010-09-15

来源:互联网

本帖最后由 jd808 于 2010-09-15 17:21 编辑

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

作者: jd808   发布时间: 2010-09-15

你的应该是没有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
}


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

作者: cookis   发布时间: 2010-09-15

建议你还是别用ET模式了,用不好会出问题

作者: @sky   发布时间: 2010-09-15

  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. }
复制代码
这是我的读程序 没啥问题吧

作者: jd808   发布时间: 2010-09-15