0

send()ブロッキングシステムコールを使用してデータを送信するとflush()、フラッシュリターンが行われます:

  • 対応するTCP-ACKが受信された後?

    また

  • データがネットワーク経由で送信された後?

4

1 に答える 1

0

@caf がコメントしてflushいるように、Linux にはシステム コールはありません。さらに、Linux には、TCP ACK が受信されるのを待つメカニズムがありません。sendカーネルのネットワークバッファに入ったネットワークにデータを送信すると、それ以上の保証はありません。カーネルがデータを受信して​​ ACK を送信すると、データがリモート ホストの受信ウィンドウに入ると、それ以上の保証はありません (リモート ホストのアプリケーションに到達していない可能性が非常に高い)。

TCP 経由で送信されたデータを確実に配信したい場合は、アプリケーション層で応答を送信して受信者にデータを確認させる必要があります。

于 2012-09-21T10:29:31.027 に答える