对于同一个套接字,我想注册两个事件:一个是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);
是不是可能?有什么问题吗?谢谢!
答案 0 :(得分:5)
以下是epoll(7)
问题与解答部分:
Q1
如果您在epoll
个实例上注册了两次相同的文件描述符会怎样?
A1
您可能会获得EEXIST
。但是,可以将重复的dup(2)
,dup2(2)
,fcntl(2)
F_DUPFD
)描述符添加到同一个epoll instance
。如果使用不同的events
掩码注册了重复的文件描述符,这对于过滤事件是一种有用的技术。