我有一个网络客户端库,我正在将它读取/写入某些网络套接字。
有一个线程执行网络I / O并响应来自公开的客户端API的请求。这些客户端API请求将从FIFO队列中弹出。
为了让线程得到请求,当我的主循环在epoll_wait上被阻止时 我想我应该使用eventfd,我可以用epoll_ctl添加。
所以问题是,如果epoll只是通过EPOLLIN通知,我如何区分推入FIFO队列的事件和网络I / O?
编辑: 我应该补充一点,我不想将事件fd存储在数据成员中,而是使用ptr成员。我想我需要将fd存储在该结构中的某个位置。
我可以简单地检查触发事件是否是我的事件文件描述符,因此也从我的fifo中读取,如果它不相等那么它必须是网络事件?这样安全吗?或者是否有最佳实践方法。