の参考資料poll()
ただ言って」指定された fd 値が無効です。このフラグは revents メンバーでのみ有効です。 eventsメンバーでは無視する必要があります。」。
これは不明です(少なくとも私にとっては)。ファイル記述子が無効な場合、ポーリングはエラー(負の戻り値)を返すべきではありませんか?
私は同じ問題があり、POLLERR
どこかでデバイスやネットワークのバグを示す可能性があることを読んだ。これは、、POLLNVAL
謎のままです。
ケースケースを知っている人はいますか?
答え1
POLLNVAL
ファイル記述子番号がファイル記述子と一致しない場合、この値が設定されます。
poll
エラーを返すのではなく、この動作を選択した理由がわかりません。その理由は、おそらく実装が簡単だからです。struct pollfd
配列の一部の要素は変更されていますが、他の要素は変更されていない早期戻りを処理することなく、実装が配列を一度繰り返すことを可能にします。
その理由は、プログラマの利便性によるものかもしれません。無効なファイル記述子を呼び出すことはエラーではないため、poll
ファイル記述子を閉じて配列に含めることができます。これらの利便性は限られています。他のファイルを開かない限り(ファイル記述子を再利用できるため)、これを行うことができ、配列要素に対してまだ(小さい)パフォーマンスペナルティを支払う必要があります。これは、あるスレッドが呼び出しをclose
実行している間に他のスレッドが呼び出しをpoll
実行または呼び出しようとするマルチスレッドプログラムに役立ちます。これはバグではなく、ポーリングスレッドはopen
。