recvfrom()在Stop-and-Wait UDP中返回值?

时间:2013-10-22 03:38:22

标签: c sockets udp

我正在尝试在C中实现Stop-and-Wait UDP客户端 - 服务器套接字程序。众所周知,Stop-and-Wait流控制基本上有三种可能的场景。即,在发送数据包之后,

  1. 发件人收到正确的ACK,从而开始传输下一个数据包;
  2. 发件人收到错误的ACK,因此会重新发送此数据包;
  3. 发件人在ACK内未收到TIMEOUT,因此会重新传输此数据包。
  4. 我的想法是将这三种方案与发件人方recvfrom()的返回值区分开来。

    • 对于方案1和2:recvfrom()只返回收到的ACK的长度。因为在我的实现中,不正确的ACK与正确的ACK长度相同,所以我将不得不深入检查ACK的内容。没什么大不了的。我知道怎么做。
    • 当我尝试识别未收到recvfrom()的方案3时出现问题。令我困惑的是我的recvfrom()在while循环中,因此ACK将被不断调用。 当接收者实际上没有发送发件人{{1}}时会返回什么?是0还是1?

1 个答案:

答案 0 :(得分:0)

如果因设置SO_RCVTIMEO, recvfrom()(和朋友)而收到超时,则会返回-1,errno设为EAGAINEWOULDBLOCK < / p>

man page:“EAGAIN或EWOULDBLOCK:套接字被标记为非阻塞,接收操作将被阻止,或者已经设置了接收超时,并且在收到数据之前超时已到期。”

相关问题