c - 如何区分同一套接字上的读写事件?

标签 c sockets epoll

我正在使用 epoll 获取有关传入数据的通知。这并不难,因为 epoll_wait() 返回的所有事件都表明,我可以从 epoll_event.data.fd(套接字描述符)中读取数据。

但现在我想获得两种类型的通知:接收和发送(套接字可用于发送)。但我不能这样做,因为:

  1. epoll_event.eventsepoll_wait()返回的,和我传入epoll_ctl()是一样的。所以在我的例子中,它同时包含 EPOLLINEPOLLOUT
  2. 此外,如果我尝试在 epoll 中两次添加一个套接字(作为 EPOLLIN 和作为 EPOLLOUT 事件),我将得到一个 EEXIST

如何在每次收到通知时不手动调用 select() 来解决这个问题?

最佳答案

man epoll_wait 明确指出“events 成员将包含返回的事件位域”。因此,如果您得到 EPOLLIN | epoll_event.events 中的 EPOLLOUT,那么你的套接字必须准备好读写。

如果您只想在套接字改变状态时得到通知,请使用EPOLLET 进行边沿触发操作。

关于c - 如何区分同一套接字上的读写事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712944/

相关文章:

c - 为什么我的字符串打印了两次?

c - 用于写入 EBCDIC 字符数组的 fputs

c - 磁盘上的链表数组

c - getchar() 的奇怪行为

java - 套接字未读取数据

c - 段错误 - 套接字编程 - C

c - Linux,套接字,非阻塞连接

sockets - 安装 lua 套接字库

c++ - Linux:WAITING PID 死亡

linux - epoll:指定EPOLLONESHOT时电平触发和边沿触发的区别