デバイスTXリングへの書き込みをキューに入れることができない場合、TCPはどうなりますか?

デバイスTXリングへの書き込みをキューに入れることができない場合、TCPはどうなりますか?

デバイスtxリングがいっぱいで、通常のC非ブロック書き込み(fd、buff)を実行して、データをTCP SNDバッファにキューに追加するとします。

これが失敗した場合はどうなりますか? UDPではパケットが破棄されますが、TCPではどうなりますか?

コンテキストは次のとおりです。

非ブロック方式で一連のTCPソケットにデータを順次送信するテスターがあります。 SND BUFFを埋めるのに十分なデータを送信します。

私がテストしている条件は、500の接続のうちのいくつかに対してSND BUFFを入力してから数秒間、非ブロックポーリングでOPS_WRITEイベントを受信しないことです。場合によっては、最大2〜3秒間アンケートで何も得られないことがあります。

TX RINGを512から2048に増やしましたが、ネットワークカードが10秒以上の容量に達していない場合、これは発生しません。

答え1

~から書き込み(2)

間違い

      ⋮

イガオンまたはエドワードブロック

    ファイル記述子FDソケットを参照し、非ブロックとしてマークされています(O_非遮断)、書き込みがブロックされます。 POSIX.1-2001はこの場合、エラーの1つが返されることを許可し、これらの定数が同じ値を持つ必要はないため、移植可能なアプリケーションは両方の可能性を確認する必要があります。

つまり、write-1が返され、またはerrnoに設定されます。 (もちろんバッファ内のデータは転送されません。)EAGAINEWOULDBLOCK

関連情報