epollセットにfdを追加すると、 'struct epoll_event.data'を使っていくつかの状態を関連付けることができます。 epollがfdでイベントを報告すると、それはもちろん、関連するデータをイベントとともにユーザに返します。これは、epollセットがfdsと関連する状態の間のマッピングを維持していることを意味します。epollのfdと関連状態のマッピング
epoll_event.data.ptrを私が動的に割り当てた状態に設定しているとしましょう。将来、ある時点でepollからfdを削除したいので、先にptrで設定したメモリを解放します。
私が知る限り、上記を達成するためにepollセット内のfdに関連付けられた状態を調べるプログラム的な方法はありません。私は現在、fdsと関連する状態との間の独自のマッピングを維持しています。このマッピングの維持には多くのメモリは必要ありませんが、私はまだ2つの異なる場所で同じマッピングを維持することが非常に効率的ではないと感じています。
私の質問です:epollセット内のfdに関連付けられた状態を取得する方法はありますか?
あなたはepollセットに追加した独自の状態を保持できます。イベントが発生するたびに、ローカルコピーからもイベントを削除し、2つのイベントを同期させておくことができます。 –
削除したいfdを閉じるだけで、epoll_waitでそのfdとあなたのデータをERR/HUP/INVAL状態で返すことができますか? – Useless
良いアイデアだけど、私はfdを閉じたくありません。私はレベルのトリガを使用する必要がありますが、特定の状況では、fdが読み込み可能かどうかは気にしません。私は私のロジックを書き直してepollセットからfdを削除する必要がないようにします。 – Akhi