繁体   English   中英

如何在Linux上用C编写一个简单的WatchDog Timer?

[英]How to write a simple WatchDog Timer in C on linux?

TCP KEEPALIVE计时器的默认持续时间为2小时。
知道TCP连接/套接字尽快失效的最佳做法是什么 -

  • 实施WatchDog计时器是最好的方法吗?

  • 如何实现WatchDog计时器呢?
    我浏览得非常广泛(可能是我使用了错误的搜索参数)但我还没有看到任何针对Linux GPOS的实现,我看到的是一些基于硬件的嵌入式系统计时器,它们依赖于硬件。

通常,在检测到套接字/连接是否已经死亡后,您会怎么做。

  • 你是否只关闭socket_descriptor?
  • 关闭socket_descriptor会释放与该连接相关的所有内核资源吗?
  • 如何释放在用户空间关联/分配的所有资源? 你做了一个例行公事吗? 如果是,您如何跟踪在用户空间中分配的资源?

没有办法检测到TCP连接“尽快”死亡。 如果另一侧的主机已经死机,它不再参与TCP连接对话框,并且注意到连接超时的唯一方法。

您可以降低套接字上的保持活动时间以提前“注意”该问题,但这通常不是一个好的解决方案。

如果您正在尝试监控主机,请以适合您的频率发送短“ping”消息。 如果对方在给定的时间间隔内没有回答,您可以声明它“死”。

一旦您注意到死连接,关闭套接字就足以释放与该套接字关联的所有内核资源。

如果您在旁边分配了其他资源(例如会话信息),您还需要释放这些资源。 为此编写一个函数(以及在建立连接时分配这些资源)确实是一个好主意,这样所有的簿记都在同一个位置并且易于检查。

如何跟踪分配的资源完全取决于您。 在一个struct保存对所有“被释放”资源的引用,并将该结构保存在链接列表或散列中(例如,由套接字fd索引)可以很好地解决。

(无论如何,Linux中的“看门狗定时器”一词用于硬件监控设备。这不是搜索网络/ TCP相关事物的好词。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM