[英]recvfrom() return values in Stop-and-Wait UDP?
我正在嘗試在C中實現“ Stop-and-Wait UDP
客戶端-服務器套接字程序。眾所周知,“ Stop-and-Wait
流控制基本上存在三種情況 。 即,在發送數據包之后,
ACK
,從而開始發送下一個分組; ACK
,從而重新發送該分組; TIMEOUT
內未收到ACK
,因此重新發送此數據包。 我的想法是通過發送方的recvfrom()
返回值來區分這三種情況。
recvfrom()
僅返回接收到的ACK
的長度。 由於在我的實現中,錯誤的ACK
與正確的ACK
具有相同的長度,因此我將不得不更深入地檢查ACK
的內容。 沒什么大不了的。 我知道該怎么辦 ACK
情況3時,問題就來了。 令我感到困惑的是,我的recvfrom()
在while循環內,因此recvfrom()
將被不斷調用。 當接收方未實際發送發送方ACK
時,它將返回什么? 是0還是1? 如果由於設置SO_RCVTIMEO,
而導致接收超時SO_RCVTIMEO,
recvfrom()
(和朋友)將返回-1,並將errno
設置為EAGAIN
或EWOULDBLOCK
手冊頁 :“ EAGAIN或EWOULDBLOCK:套接字被標記為非阻塞,並且接收操作將阻塞,或者已設置接收超時,並且超時在接收數據之前到期。”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.