如何在Linux上用C语言编写简单的看门狗计时器?

3
TCP KEEPALIVE定时器的默认持续时间为2小时。
知道TCP连接/套接字已关闭的最佳实践是什么--
  • 是否实现WatchDog计时器是最好的方法?

  • 如何实现看门狗计时器呢?
    我浏览了相当广泛(可能使用了错误的搜索参数),但我没有看到任何针对linux GPOS的实现,所有我看到的都是一些硬件依赖的嵌入式系统计时器。

通常在检测到套接字/连接断开后,您会怎么做。

  • 您只会关闭socket_descriptor吗?
  • 关闭socket_descriptor是否会释放与该连接关联的所有内核资源?
  • 如何释放在用户空间分配的所有资源?您是否编写一个程序来执行此操作?如果是,如何跟踪在用户空间中分配的资源?
1个回答

4
无法立即检测到TCP连接断开。如果另一端的主机已经关闭,则不再参与TCP连接对话,唯一发现它的方法是连接超时。您可以降低套接字上的keepalive时间来更早地"注意"问题,但这通常不是一个好的解决方案。如果您正在尝试监视主机,请以任何适合您的频率发送短"ping"消息。如果另一端在给定的时间间隔内没有响应,则可以将其声明为"死机"。一旦您发现了一个死掉的连接,关闭套接字就足以释放与该套接字关联的所有内核资源。如果您还分配了其他资源(例如会话信息),则还需要释放这些资源。确实很好的想法是编写一个函数来处理这些内容(并在连接时分配这些资源),以便所有这些记录都在同一个位置且易于检查。如何跟踪所分配的资源完全取决于您。在一个结构体中保存所有“要释放”的资源的引用,并将该结构体保存在链表或哈希中(例如按套接字fd索引)可能效果很好。在Linux中,术语“看门狗计时器”通常用于硬件监控设备。这不是搜索网络/TCP相关事物的好术语。

如果你需要一个例子,可以查看ircd-ratbox在client.c文件中的check_pings_list()函数是如何实现的。 - caf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接