簡體   English   中英

recvfrom()返回“停止並等待” UDP中的值?

[英]recvfrom() return values in Stop-and-Wait UDP?

我正在嘗試在C中實現“ Stop-and-Wait UDP客戶端-服務器套接字程序。眾所周知,“ Stop-and-Wait流控制基本上存在三種情況 即,在發送數據包之后,

  1. 發送方接收到正確的ACK ,從而開始發送下一個分組;
  2. 發送方接收到錯誤的ACK ,從而重新發送該分組;
  3. 發送方在TIMEOUT內未收到ACK ,因此重新發送此數據包。

我的想法是通過發送方的recvfrom()返回值來區分這三種情況。

  • 對於場景1和場景2: recvfrom()僅返回接收到的ACK的長度。 由於在我的實現中,錯誤的ACK與正確的ACK具有相同的長度,因此我將不得不更深入地檢查ACK的內容。 沒什么大不了的。 我知道該怎么辦
  • 當我嘗試識別沒有收到ACK情況3時,問題就來了。 令我感到困惑的是,我的recvfrom()在while循環內,因此recvfrom()將被不斷調用。 當接收方未實際發送發送方ACK時,它將返回什么? 是0還是1?

如果由於設置SO_RCVTIMEO,而導致接收超時SO_RCVTIMEO, recvfrom() (和朋友)將返回-1,並將errno設置為EAGAINEWOULDBLOCK

手冊頁 :“ EAGAIN或EWOULDBLOCK:套接字被標記為非阻塞,並且接收操作將阻塞,或者已設置接收超時,並且超時在接收數據之前到期。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM