歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 關於epoll_wait返回值的一個簡單測試

關於epoll_wait返回值的一個簡單測試

日期:2017/2/28 13:53:20   编辑:Linux教程

關於epoll_wait返回值的一個簡單測試

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
      {/*出錯*/

      }
    }
  }
}

通過測試發現epoll_wait返回值number是不會大於MAX_EVENT_NUMBER的。

測試過程中,連接的客戶端數遠大於MAX_EVENT_NUMBER,由此可以推論:epoll_wait()每次返回的是活躍客戶端的個數,每次並將這些活躍的客戶端信息加入到events[MAX_EVENT_NUMBER]。

由此可見,活躍客戶端的個數相同的情況下,events[MAX_EVENT_NUMBER]越大,epoll_wait()函數執行次數越少,但是events[MAX_EVENT_NUMBER]越大越消耗存儲資源。

所以,MAX_EVENT_NUMBER的選擇應該在效率和資源間取一個平衡點。

Copyright © Linux教程網 All Rights Reserved