Skip to content

超时定时器

timeout.c

为每个与外界网络连接的任务都设定了timeout属性,即等待超时时间,例如TCP建立连接超时、ARP缓存表项的时间管理等,都需要超时操作来处理

image-20240704220035884

事件是按照触发的事件进行排序的

image-20240704221330240

在实际实现的时候会使用const struct lwip_cyclic_timer lwip_cyclic_timers[];进行管理默认的事件, 在函数sys_timeouts_init里面进行注册

实际注册的时候会通过当前的时间计算超时的时间, 申请一个sys_timeo结构体进行记录信息, 之后按照超时的时间把这一个结构体插入链表

使用链表next_timeout记录所有需要处理的超时事件

c
void sys_timeout(u32_t msecs, sys_timeout_handler handler, void *arg)

注册一个事件

c
void sys_untimeout(sys_timeout_handler handler, void *arg)

删除一个事件

  • 查询

裸机的时候需要定时调用sys_check_timeouts这一个函数

操作系统的时候会在tcpip的线程里面调用函数tcpip_timeouts_mbox_fetch