gpt4 book ai didi

c - 如何在 Linux 上用 C 编写一个简单的看门狗定时器?

转载 作者:可可西里 更新时间:2023-11-01 02:33:52 24 4
gpt4 key购买 nike

TCP KEEPALIVE 计时器的默认持续时间为 2 小时。
尽快了解 TCP 连接/套接字关闭的最佳做法是什么 --

  • 实现 WatchDog 计时器是解决问题的最佳方式吗?

  • 如何实现看门狗计时器来执行此操作?
    我已经广泛浏览了(可能是我使用了错误的搜索参数)但我还没有看到 linux GPOS 的任何此类实现,我所看到的只是一些基于硬件的嵌入式系统计时器,它们是硬件相关的。

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

  • 是否只关闭 socket_descriptor?
  • 关闭 socket_descriptor 是否会释放与该连接关联的所有内核资源?
  • 如何释放在用户空间关联/分配的所有资源?你写例程,做。如果是,您如何跟踪您在用户空间中分配的资源?

最佳答案

无法“尽快”检测到 TCP 连接已断开。如果另一端的主机挂了,它就不再参与 TCP 连接对话,唯一注意到这一点的方法就是连接超时。

您可以缩短套接字上的保持事件时间以更早地“注意到”问题,但这通常不是一个好的解决方案。

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

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

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

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

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

关于c - 如何在 Linux 上用 C 编写一个简单的看门狗定时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6080042/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com