0

Linux std ソケットで send を使用して、ネットワーク経由でパケットを書き込みます。呼び出しを送信し、データをバッファリングし、「常に」0 より大きい値を返します。送信 問題をオペレーティング システムと下位レベルに渡します。送信呼び出しを停止して、パケットが他のエンドシステムに配信されるのを待つにはどうすればよいですか? TCP ACK などを待っていますか?

if (send(broker->socket, packet, sizeof(packet), 0) < sizeof(packet)){
 return -3;
}   

テストは次のようになります: パケットの送信を開始し、イーサネットを取り外し、再接続します。
ありがとう、私の悪い英語でごめんなさい。

4

1 に答える 1

1

リモート ピアがデータに ack を返したかどうかを確認する確実な方法はありません。実際、リモート TCP がデータを確認しても、リモート プロセスがデータを読み取ったとは限りません。最も簡単な方法は、一種のアプリケーション層 ACK を実装することです。この場合、ピアは、「わかりました」という合図でバイトを送り返します。

  • あなたが電話するsendと、すぐに戻ってきます
  • この時点で、カーネルが動作を開始し、データをプッシュしようとします
  • recvどのブロックを呼び出すか
  • リモート側はデータを受信し、いくつかのデータを送り返し、それを確認します
  • あなたのrecvブロックを解除

この時点で、リモート側がデータを受信したことを確認できます。

于 2013-04-10T21:02:39.103 に答える