send()
ブロッキングシステムコールを使用してデータを送信するとflush()
、フラッシュリターンが行われます:
対応するTCP-ACKが受信された後?
また
データがネットワーク経由で送信された後?
send()
ブロッキングシステムコールを使用してデータを送信するとflush()
、フラッシュリターンが行われます:
対応するTCP-ACKが受信された後?
また
データがネットワーク経由で送信された後?
@caf がコメントしてflush
いるように、Linux にはシステム コールはありません。さらに、Linux には、TCP ACK が受信されるのを待つメカニズムがありません。send
カーネルのネットワークバッファに入ったネットワークにデータを送信すると、それ以上の保証はありません。カーネルがデータを受信して ACK を送信すると、データがリモート ホストの受信ウィンドウに入ると、それ以上の保証はありません (リモート ホストのアプリケーションに到達していない可能性が非常に高い)。
TCP 経由で送信されたデータを確実に配信したい場合は、アプリケーション層で応答を送信して受信者にデータを確認させる必要があります。