2012-03-02 32 views
1

我有一個簡單的UDP套接字程序在C.客戶端傳輸數據到服務器並收到確認。我已經知道如何配置超時,以便如果'recvfrom()'在一段時間內沒有收到任何消息,鬧鐘就會響起。如何在C UDP套接字程序中配置重傳超時?

但是還有一些情況需要處理。如果我收到來自意外地址的回覆,或回覆格式不正確,該怎麼辦?只有當鬧鈴響起時,我纔會立即轉發。

讓我知道我是否需要澄清。

+0

報警?你是從beej網絡代碼中挑選出來的嗎? – tbert 2012-03-02 17:04:20

+0

誰/什麼是beej? – Groppe 2012-03-02 17:21:08

回答

1

調查select(2)poll(2) - 您可以在套接字上等待指定的時間。如果需要,您可以重新啓動等待時間較短的超時。

如果您在Linux上,請查看epoll(7)timerfd_create(2)

0

如果您想檢查並查看它們是來自意外地址還是格式不正確,您將必須對收到的數據報進行處理。爲了更輕鬆地處理這些案例,您應該構建一個狀態機來處理您的不同案例。

例如,你可以有以下狀態:

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

此外,如果您發現之一這些其他的錯誤條件,你不想立即重新發送你將需要你一些定時器或睡眠con要等到你準備好轉發。