2

The documentation of poll() did not explain this in detail. While polling on an fd, when should one POLLIN and when should one use POLLPRI? Any insights will be useful.

4

3 に答える 3

9

poll() ドキュメントにいくつかの説明があります。

POLLIN 読み取るデータがあります。POLLPRI 読み取る緊急のデータがあります。

POLLIN のみを使用する場合、poll() は、読み取るデータまたは緊急のデータがある場合に戻ります。POLLPRI のみを使用する場合、poll() は、読み取る緊急のデータがある場合にのみ返されますが、通常のデータは無視されます。

緊急データとは何ですか?tcp の帯域外データのように。TCP フレーム ヘッダーには、urg_data という名前のフラグがあります。Urg_data は、このフレームの配信優先度が高いことを意味します。カーネルが urg_data で作成されたフレームを受信すると、POLLPRI フラグが設定されます。次のコードを見てください。

...
if (tp->urg_data & TCP_URG_VALID)
   mask |= POLLPRI;
....
return mask;
于 2013-03-15T02:00:59.913 に答える
2

UNIX ネットワーク プログラミングによると、第 3 版POLLPRIは STREAMS 専用であり、POSIX 準拠のシステムで TCP または UDP を使用している場合はトリガーされません。

https://books.google.dk/books?id=ptSC4LpwGA0C&pg=PA183&lpg=PA183&dq=POLLRDNORM+POLLRDBAND+POLLPRI&source=bl&ots=Ks7CSockOv&sig=nqzhameGpvzi_TSq1-2qi9gqdaY&hl=en&sa=X&ved=0ahUKEwjjqaOh9cbPAhWGjCwKHWjxCdw4ChDoAQg_MAc#v=onepage&q=POLLRDNORM%20POLLRDBAND%20POLLPRI&f=間違い

于 2016-10-06T19:57:12.733 に答える
1

私は常に両方を使用します。これはビットマスクであるため可能です(したがって、を使用できますPOLLIN | POLLPRI)。

優先順位のエントリは、通常の情報よりも重要であると考えられる情報のためのものです。理想的には、両方のタイプを要求してから、最初に優先度の高いタイプをチェック/処理します。

于 2013-03-15T01:07:12.407 に答える