TCP を使用して複数のスレーブ レプリカにデータをレプリケートする Linux 用の C で記述されたクライアント サーバー アプリケーションに取り組んでおり、一部のレプリカの予期しない一時的なシャットダウンに対処する方法を知りたいです (UNIX プロセスのクラッシュである可能性があります)。またはハードウェアの電源オフ)。
write() システムコールをカーネルに発行すると、正常に返されたということは、データがソケットにコピーされたことを意味しますが、受信側がデータを取得したことを意味するわけではありません。宛先の電源がオフになってから電源がオンになった場合は、データが失われた時点から (新しい TCP 接続を確立した後に) レプリカにデータを再送信する必要があります。
大量のデータを扱っていて、すでに送信したデータを保持していないとしましょう (つまり、write() システムコールが成功を返しました)。送信される保留中のデータのみを保持します。
レプリカが予期しないシャットダウンから回復し、再接続したとき、カーネルから、ソケットに書き込まれたが宛先ホストで「確認」されていないデータを取得するにはどうすればよいですか?
言い換えれば、TCP 接続の損失から回復し、停止した時点からクライアントとサーバー間の伝送を再確立するにはどうすればよいでしょうか?