我必须为UDP文件传输应用程序管理多个计时器, 超时后,服务器必须重新发送数据包到客户端,但一次有多个数据包可能导致超时。
所以我必须为每个数据包管理一个计时器。我怎么能这样做?
我无法使用闹钟,因为它取消了之前的闹钟,并且只能在几秒钟内完成。
答案 0 :(得分:1)
您需要为要跟踪的每个数据包保留一个包含超时的结构数组。
每个数组元素应包含每个超时的开始时间和预期结束时间。在设置定时器的时候,检查阵列中的所有条目,看看哪个条目预计会先超时。然后从当前时间中减去该时间,以获得select
的超时值。
当套接字读取超时时,再次浏览列表,对于超时时间早于当前时间的每个数据包,处理该数据包的超时。
查看我编写的名为UFTP的多播文件传输应用程序的源代码,以获取如何实现此功能的示例。具体来说,请查看client_loop.c中的getrecenttimeout
函数。