我可以在epoll上为同一套接字描述符注册2个或多个事件吗?

时间:2013-05-20 16:54:08

标签: sockets network-programming epoll

对于同一个套接字,我想注册两个事件:一个是EPOLLIN,另一个是EPOLLOUT | EPOLLET。

所以对于输入,我希望它是电平触发器,对于输出,我希望它是边沿触发器。

            ev.data.fd=fd;
            ev.events=EPOLLIN;
            epoll_ctl(epfd,EPOLL_CTL_ADD,fd,&ev);
            ev.events=EPOLLOUT|EPOLLET;
            epoll_ctl(epfd,EPOLL_CTL_ADD,fd,&ev);
是不是可能?有什么问题吗?谢谢!

1 个答案:

答案 0 :(得分:5)

以下是epoll(7) 问题与解答部分:

  

Q1 如果您在epoll个实例上注册了两次相同的文件描述符会怎样?

     

A1 您可能会获得EEXIST。但是,可以将重复的dup(2)dup2(2)fcntl(2) F_DUPFD)描述符添加到同一个epoll instance。如果使用不同的 events 掩码注册了重复的文件描述符,这对于过滤事件是一种有用的技术。