c - 如何处理UDP协议(protocol)的多个重传定时器?

标签 c timer udp

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

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

我不能使用闹钟,因为它取消了以前的计时器,而且也只适用于秒数。

最佳答案

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

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

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

查看我编写的名为 UFTP 的多播文件传输应用程序的源代码有关如何实现的示例。具体看client_loop.c中的getrecenttimeout函数。

关于c - 如何处理UDP协议(protocol)的多个重传定时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39458453/

相关文章:

javascript - 为什么倒计时卡在 "1"?

udp - 如何在 Deno 中发送 UDP 数据?

c# - 由于极不可能的情况发生而丢失数据包?

c++ - 为什么共享库符号中定义的符号没有被使用?

谁能解释这个递归函数我不明白它如何返回任何东西?

c - 支持扩展名的文件通配

java - Java 静态 Timer 可以处理多个调用 cancel() 的 TimerTasks 吗?

c - linux中时序计算的引用是什么

c - C代码中有什么错误?

sockets - UDP 连接和安全