首页 / 操作系统 / Linux / 关于epoll_wait返回值的一个简单测试
关于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
", 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的选择应该在效率和资源间取一个平衡点。本文永久更新链接地址