• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

epoll_wait 的事件 返回 的fd为错误

Peter蒎 2017-02-15 浏览量:1846

netlink 的 socket 连接 的 fd 为18,但是添加到epoll后 epoll_wait()返回的fd 为 0  为什么会出现这样的现象?


补充 说明:

1、 epoll_wait返回event数据结构中的data.fd

2、在嵌入式Linux下执行返回的 fd 为 0,在Ubuntu下运行为4217881

  

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:4
  • struct epoll_event events[MAX_EVENT_NUMBER];

    epoll_wait()每次返回的是活跃客户端的个数,而不是fd的值。


    void test(int epollfd)
    {
      struct epoll_event events[MAX_EVENT_NUMBER];
      int number;
    
      while (1)
      {
        number = epoll_wait(epollfd, events, MAX_EVENT_NUMBER, -1);
        printf("number : %2d\n\n", number);
        for (i = 0; i < number; i++)
        {
          sockfd = events[i].data.fd;
    
          if (sockfd == listenfd)
          {/*用户上线*/
    
          }
          else if (events[i].events & EPOLLIN)
          {/*有数据可读*/
    
          }
          else if (events[i].events & EPOLLOUT)
          {/*有数据可写*/
    
          }
          else
          {/*出错*/
    
          }
        }
      }
    }


Peter蒎 回复了 LiuYang:是返回event中的数据域中fd 回复

  • 嗨,您要使用Epoll的epoll_wait函數,那麼最好要創建evenfd當作file descriptor,函數原型描述如下:

    原網址http://man7.org/linux/man-pages/man2/eventfd.2.html

    NAME

           eventfd - create a file descriptor for event notification
    


    SYNOPSIS

           #include <sys/eventfd.h> 
            int eventfd(unsigned int initval, int flags); 


    DESCRIPTION

           eventfd() creates an "eventfd object" that can be used as an event
           wait/notify mechanism by user-space applications, and by the kernel
           to notify user-space applications of events.  The object contains an
           unsigned 64-bit integer (uint64_t) counter that is maintained by the
           kernel.  This counter is initialized with the value specified in the
           argument initval.
    以上希望對您有用

  • 在epoll_event 数据结构中存在epoll_data_t 其中对该值进行了两次赋值,而epoll_data_t 却是为共用体结构,将前值进行了覆盖。

  • epoll_wait()确实返回的是当前客户端的个数
电子老工程师 回复了 :精度不同,K10%。M20% 回复

相关问题

问题达人换一批

epoll_wait 的事件 返回 的fd为错误