0

我有一个网络客户端库,我将它放在一起读取/写入某些网络套接字。

有一个线程执行网络 I/O 并响应来自公开客户端 API 的请求。这些客户端 API 请求将从 FIFO 队列中弹出。

为了让线程得到请求,当我的主循环在 epoll_wait 上被阻塞时,我想我应该使用一个 eventfd,我可以用 epoll_ctl 添加它。

所以问题是如果 epoll 只是用 EPOLLIN 通知,我如何区分推送到我的 FIFO 队列和网络 I/O 的事件?

编辑:我应该补充一点,我不想将事件 fd 存储在数据成员中,而是使用 ptr 成员。我想我需要将 fd 存储在该结构内的某个位置。

我可以简单地检查触发事件是否 = 我的事件文件描述符,因此也从我的 fifo 读取,如果它不相等,那么它一定是网络事件?这安全吗?或者是否有最佳实践方法。

4

1 回答 1

0

是的,您必须比较文件描述符。手册页中的示例就是这样做的。

于 2012-06-05T05:24:46.517 回答