0

UDP ベースの Stop-and-Wait ARQ を実装しています。エラー確率をシミュレートしようとしています。

送信側と受信側の両方で、while()送受信を続けるループがあります。受信側でエラー確率を導入するまで、すべてが機能します。

意図的にパケットを受信して​​も送信しないようにしています (失われACKた場合をシミュレートするため)。ACK

驚いたことに、送信側と受信側の両方がハングしますprintf()デバッグするために、送信者と受信者の両方のwhileループに a を入れ、何も出力されないため、これを知っています。

なぜこれが起こるのでしょうか?何も送信されなくても、while( と に関係なく) ループは停止sendto()recvfrom()ません。

4

1 に答える 1

1

recvfrom問題は、ループの送信側と受信側の両方にあることだと思います。

recvfromのドキュメントには次のように書かれています。

ソケットでメッセージが利用できない場合、受信呼び出しは、ソケットがノンブロッキングでない限り、メッセージが到着するのを待ちます。

ソケットをブロックしないようにするには、MSG_DONTWAIT フラグに関するドキュメントを参照してください。

したがって、受信者に確認メッセージを送信させない場合、送信者は recvfrom 関数を停止して待機しているだけであり、受信者は確認応答を省略した後、while ループを介して 2 回目に独自の recvfrom 関数にぶら下がっていると推測しています。メッセージ (送信者と受信者の両方がブロック関数 recvfrom を使用しており、そのうちの 1 つはメッセージを送信する必要があります)。

于 2013-10-28T15:38:18.977 に答える