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

mis*_*yes 3 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);
Run Code Online (Sandbox Code Playgroud)

有可能吗?有什么问题吗?谢谢!

Nik*_*sov 6

这是来自问答部分:epoll(7)

Q1 如果在epoll实例上注册两次相同的文件描述符,会发生什么?

A1 你可能会得到EEXIST.然而,有可能重复(添加dup(2),dup2(2),fcntl(2) F_DUPFD)描述的相同epoll instance.如果使用不同的events掩码注册重复的文件描述符,则这可以是用于过滤事件的有用技术.