当ACK丢失时,发送方和接收方都会停止?

时间:2013-10-28 14:43:43

标签: c sockets

我正在实施基于UDP的停止等待ARQ 。我正在尝试模拟错误概率。

在发送方和接收方中,我都有一个while()循环来继续发送和接收。一切正常,直到我在接收方引入错误概率。

我故意让接收方发送ACK即使收到了数据包(以模拟ACK丢失的情况)。

让我感到惊讶的是发件人和收件人都挂了!我知道这是因为要调试我在发送方和接收方的printf()循环中放置while并且没有打印任何内容。

为什么会这样?即使没有传输任何内容,while循环(独立于sendto()recvfrom())也不应停止。

1 个答案:

答案 0 :(得分:1)

我认为问题在于发送者和接收者在循环中都有recvfrom

recvfrom文档说:

  

如果套接字上没有可用的消息,则接收呼叫等待消息到达,除非套接字是非阻塞的。

要使套接字无阻塞,请参阅有关MSG_DONTWAIT标志的文档。

所以,我猜测当接收器没有发送你的确认消息时,发送器正在停止并等待recvfrom功能,接收器在第二次通过while循环后挂在它自己的recvfrom功能上省略确认消息(发送方和接收方都使用阻塞函数recvfrom,其中1个需要发送消息)。

相关问题