我正在尝试在C中实现Stop-and-Wait UDP
客户端 - 服务器套接字程序。众所周知,Stop-and-Wait
流控制基本上有三种可能的场景。即,在发送数据包之后,
ACK
,从而开始传输下一个数据包; ACK
,因此会重新发送此数据包; ACK
内未收到TIMEOUT
,因此会重新传输此数据包。我的想法是将这三种方案与发件人方recvfrom()
的返回值区分开来。
recvfrom()
只返回收到的ACK
的长度。因为在我的实现中,不正确的ACK
与正确的ACK
长度相同,所以我将不得不深入检查ACK
的内容。没什么大不了的。我知道怎么做。recvfrom()
的方案3时出现问题。令我困惑的是我的recvfrom()
在while循环中,因此ACK
将被不断调用。 当接收者实际上没有发送发件人{{1}}时会返回什么?是0还是1? 答案 0 :(得分:0)
如果因设置SO_RCVTIMEO,
recvfrom()
(和朋友)而收到超时,则会返回-1,errno
设为EAGAIN
或EWOULDBLOCK
< / p>
man page:“EAGAIN或EWOULDBLOCK:套接字被标记为非阻塞,接收操作将被阻止,或者已经设置了接收超时,并且在收到数据之前超时已到期。”