私はどこかで、すべてのTCP接続に独自の125kB出力および入力バッファーがあることを読みました。このバッファがいっぱいで、Linuxでデータを送信し続けるとどうなりますか?
http://www.kernel.org/doc/man-pages/online/pages/man2/send.2.htmlによると、パケットは通知なしに黙ってドロップされます。これを防ぐにはどうすればよいですか?後で続行できるように、データの少なくとも一部が正しく送信されたかどうかを確認する方法はありますか?
簡単な答えはこれです。TCPソケットでの「送信」呼び出しは、リモートエンドポイントがデータを受信して消費した結果としてTCPスライディングウィンドウ(または内部キューバッファ)が開くまでブロックされます。ディスクが保存できるよりも速くファイルにバイトを書き込もうとするのと大差ありません。
ソケットが非ブロッキングモードに構成されている場合、データを送信できるようになるまで、sendはEWOULDBLOCKまたはEAGAINを返します。標準のポーリング、選択、およびepoll呼び出しは期待どおりに機能するため、いつ再送信するかがわかります。
「パケットが落とされた」ことはわかりません。プログラムがwrite()に対して行う呼び出しは、ブロックするか、失敗を返す可能性が高いと思います。