我正在使用 epoll
获取有关传入数据的通知。这并不难,因为 epoll_wait()
返回的所有事件都表明,我可以从 epoll_event.data.fd
(套接字描述符)中读取数据。
但现在我想获得两种类型的通知:接收和发送(套接字可用于发送)。但我不能这样做,因为:
epoll_event.events
是epoll_wait()
返回的,和我传入epoll_ctl()
是一样的。所以在我的例子中,它同时包含EPOLLIN
和EPOLLOUT
。- 此外,如果我尝试在
epoll
中两次添加一个套接字(作为 EPOLLIN 和作为 EPOLLOUT 事件),我将得到一个EEXIST
。
如何在每次收到通知时不手动调用 select()
来解决这个问题?
最佳答案
man epoll_wait
明确指出“events 成员将包含返回的事件位域”。因此,如果您得到 EPOLLIN |
,那么你的套接字必须准备好读写。epoll_event.events
中的 EPOLLOUT
如果您只想在套接字改变状态时得到通知,请使用EPOLLET
进行边沿触发操作。
关于c - 如何区分同一套接字上的读写事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712944/