私はepollを使ってHTTPプロトコルを使って大きなメッセージをサーバに書き出しています。 fdsはすべて非ブロッキングに設定されており、エッジトリガーイベントを使用しています。私はEPOLLINを知っています。私はEAGAINが返されるまでfdを読み返す必要があります。私がEAGAINを取得したらループする必要があるかどうかわかりません。また、fdが読み込み可能になったときにepollが通知するのを待つ必要があります。ファイル記述子に書き込む際のepollの動作
たとえば、私は20Kのメッセージを書いています。最初の書き込みでは、送信されたデータの量は13Kです。次の書き込み要求は、retVal = -1とerrno = EAGAINを返します。
この時点で、私はデータを書き込むことができるまで私はwhileループ(1)を続けるべきですか、FDが再び書き込みの準備ができたときにepollが呼び出しを呼び出すのを待つべきですか?私の理解は、fdが書込みのために登録されているので、epollはFDが書込みの準備ができたら通知するはずです。しかし、それは私のプログラムでは起こっていないようです。
通知を受け取るために特殊なフラグを設定するか、FDを変更する必要がありますか?この時点で
James、返信いただきありがとうございます。私はコードにバグがありました。そのため、再び書き込みが可能になると、私はfdでEPOLLETイベントを受け取っていませんでした。今は期待どおりに動作します。 – user1290156