いくつかのネットワーク ソケットに対して読み取り/書き込みを行うネットワーク クライアント ライブラリをまとめています。
ネットワーク I/O を実行し、公開されたクライアント API からの要求に応答する単一のスレッドがあります。これらのクライアント API 要求は、FIFO キューから取り出されます。
スレッドがリクエストに到達するためには、私のメイン ループが epoll_wait でブロックされているときに、epoll_ctl で追加できる eventfd を使用する必要があると考えています。
問題は、epoll が EPOLLIN で通知するだけの場合、FIFO キューにプッシュされたイベントとネットワーク I/O をどのように区別できるかということです。
編集: イベント fd をデータ メンバーに格納するのではなく、ptr メンバーを使用することを追加する必要があります。その構造内のどこかにfdを保存する必要があると思います。
トリガーされたイベントがイベント ファイル記述子であるかどうかを確認するだけでよいので、fifo からも読み取ることができます。等しくない場合は、ネットワーク イベントである必要があります。これは安全ですか?またはベストプラクティスのアプローチがあります。