socket()+ POLLIN poll() + recv()+を使用して小さな TCP サーバーを作成しましたが、いつPOLLOUTポーリングを使用するか、書き込み可能なイベントでポーリングするように選択するsend()かがわかりません。writefds
POLLOUTの実際の使用例を教えてもらえますか?
poll()通常のパターンは、次のようにノンブロッキング ファイル記述子を使用することです。
poll()、
POLLINしてください。
POLLOUT相手側に送信する未処理のデータがある場合にのみ設定します。poll()、データが読み取り可能であることが示されている場合は、
poll()、ソケットが書き込み可能であることを示している場合は、
POLLOUT次はループで設定しませんPOLLOUT次回はループで設定します。POLLOUT残っている場合にのみループを介して次回に設定する予定です。POLLOUT、ループを介して次回の設定を計画してください。(この選択は、多くの場合、ループ内の 1 か所でデータの書き込みを処理するだけでよいため、プログラミングが簡単ですが、その一方で、次回のループまでデータの書き込みを遅らせます。)nginx ソースから、次のことがわかりました。
送信するデータがある場合、nginx はシステムコール (おそらく writev) で送信しようとします。ただし、nginx が一度に合計データを送信できない場合、pollfd で POLLOUT を設定し、poll イベントを使用している場合は、書き込み可能なイベントを待機します。書き込み可能なイベントを取得すると、nginx は左のデータを送信します。
nginx が大きな静的ファイルに応答しようとすると、このケースを簡単に再現できます。