3

クライアントに大量のデータを送信する必要があるサーバー アプリケーションを開発しています。ただし、クライアントはいつでも切断される可能性があり、この場合、ソケットの send()/write() はエラーを返します。クライアントが再接続したときに中断した場所からデータを送信し続けることができるように、クライアントが切断される前に実際にどれだけのデータが配信されたかを確認したいと思います。

ソケット API を使用して確認することはできますか?

4

1 に答える 1

6

いいえ、ソケット API はこの情報を提供しません。実際、これを知ることは一般には不可能です。接続が失敗した特定の方法に応じて、一方の TCP スタックは通常、他方の側にどれだけのデータが正常に送信されたかを知ることができません。認識できる唯一のことは、確認されたデータの量であり、これは同じことではありません。そして、TCP/IP 以外のもの (ローカル OS、リモート OS、リモート プロセス、リモート アプリケーション ロジック) に障害が発生した可能性があることを考えると、TCP レベルで確認応答されたデータの量は、とにかくあまり意味がありません。 .

エンド ツー エンドのアプリケーション プロトコルを使用して、リモート エンドが受信し、正常に処理された (および該当する場合はコミットされた) データを確認できるようにする必要があります。

于 2013-02-26T15:21:51.650 に答える