在C套接字通信中设置多个定时器

时间:2012-01-05 08:54:03

标签: c linux sockets timer client-server

我面临着用C语言在套接字通信程序中维护多个计时器的情况。我有一个客户端服务器程序,其中客户端和服务器应该为它发送到另一台机器的每个数据包维护一个计时器。 我这样的协议是这样的 - 机器A发送的每个数据包,机器B必须在一定时间内确认相同的数据包。因此,机器A发送的每个数据包都必须有一个定时器。如果计时器检测到超时,则套接字连接必须关闭。 这样我就需要为每个数据包维护定时器。所有数据包的超时时间都相同。我想知道C中是否有任何规定设置不同的定时器并区分它们以实现上述功能。

2 个答案:

答案 0 :(得分:1)

您可以拥有一个计时器和一个“事件”队列,而不是多个计时器。队列按事件发生时排序。因此,当您发送数据包时,只需将disconnect-event添加到事件队列,并将一些标识符存储到该事件。如果您在事件触发前收到回复,请从队列中删除该事件。

答案 1 :(得分:0)

我对你正在寻找的东西没有一个准确的答案,你可以做的一种方法是在任何一方(在客户端和服务器上)创建一个等待其ACK的数据包池,每个数据包在池中标记为生存时间

一旦收到ACK,就会将数据包踢出池。对于保持在等待中的数据包 - 某个守护者可以监视池可以由全局定时器计时,并且所有管理器都会定期为池中的每个数据包递减TTL(比如每个N刻度)。 ACK未及时到达的数据包(TTL达到0)被声明超时并处理套接字。