簡體   English   中英

如何在C UDP套接字程序中配置重傳超時?

[英]How do I configure a retransmit timeout in a C UDP socket program?

我在C語言中有一個簡單的UDP套接字程序。客戶端將數據傳輸到服務器並接收確認。 我已經知道如何配置超時,這樣,如果'recvfrom()'在特定時間內沒有收到任何警報,便會響起。

但是,我還需要處理其他幾種情況。 如果我收到來自意外地址的答復,或者答復的格式不正確怎么辦? 我不希望僅在警報響起時立即重新發送。

讓我知道是否需要澄清。

查看select(2)poll(2) -您可以在套接字上等待指定的時間。 然后,可以根據需要以更短的超時時間重新開始等待。

如果您使用的是Linux,請查看epoll(7)timerfd_create(2)

如果要檢查接收的數據報,並查看它們是否來自意外的地址或格式是否錯誤,則必須對其進行處理。 為了使處理這些案件更加容易,您應該構建一個處理不同案件的狀態機。

例如,您可能具有以下狀態:

  • 讀取超時
  • 數據格式錯誤
  • 無效的發送地址
  • 有效數據

同樣,如果您檢測到這些其他錯誤情況之一,並且不想立即重傳,則將需要某種計時器或睡眠條件來等待,直到准備好重傳為止。

暫無
暫無

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

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