如何处理UDP协议的多个重传定时器?

时间:2016-09-12 20:39:05

标签: c timer udp

我必须为UDP文件传输应用程序管理多个计时器, 超时后,服务器必须重新发送数据包到客户端,但一次有多个数据包可能导致超时。

所以我必须为每个数据包管理一个计时器。我怎么能这样做?

我无法使用闹钟,因为它取消了之前的闹钟,并且只能在几秒钟内完成。

1 个答案:

答案 0 :(得分:1)

您需要为要跟踪的每个数据包保留一个包含超时的结构数组。

每个数组元素应包含每个超时的开始时间和预期结束时间。在设置定时器的时候,检查阵列中的所有条目,看看哪个条目预计会先超时。然后从当前时间中减去该时间,以获得select的超时值。

当套接字读取超时时,再次浏览列表,对于超时时间早于当前时间的每个数据包,处理该数据包的超时。

查看我编写的名为UFTP的多播文件传输应用程序的源代码,以获取如何实现此功能的示例。具体来说,请查看client_loop.c中的getrecenttimeout函数。