2016-09-12 24 views
2

我必須管理UDP文件傳輸應用程序的多個定時器, 在服務器不得不重新發送數據包到客戶端之後,但一次有多個數據包可能會導致超時。如何處理UDP協議的多個重傳計時器?

所以我必須爲每個數據包管理一個定時器。我怎樣才能做到這一點?

我不能使用報警,因爲它取消了以前的計時器,也只能用秒。

+0

使用'select(2)'系統調用,它允許您指定超時(使用usec分辨率) –

回答

1

您需要爲每個要跟蹤的數據包保留一個包含超時的結構數組。

每個數組元素應包含每個超時的開始時間和預期結束時間。當需要設置計時器時,請檢查數組中的所有條目以查看哪一個條目首先超時。然後從當前時間中減去該時間以獲得select的超時值。

當套接字讀取超時時,再次遍歷列表,並且對於超時時間在當前時間之前的每個數據包,處理該數據包的超時值。

看看我寫的名爲UFTP的多播文件傳輸應用程序的源代碼,以瞭解如何實現這個功能。具體來說,請查看client_loop.c中的getrecenttimeout函數。