系统相关
首页 > 系统相关> > 如何在Linux上的C语言中编写一个简单的WatchDog Timer?

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

作者:互联网

TCP KEEPALIVE计时器的默认持续时间为2小时.
知道TCP连接/套接字尽快关闭的最佳实践是什么-

>实现WatchDog计时器是最好的方法吗?
>如何实现WatchDog计时器呢?
我已经进行了相当广泛的浏览(可能是我使用了错误的搜索参数),但是我还没有看到针对Linux GPOS的任何此类实现,我所看到的只是基于硬件的嵌入式系统计时器,这取决于硬件.

通常,在检测到套接字/连接已失效后该怎么办.

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

解决方法:

无法检测到TCP连接“ ASAP”已死.如果另一端的主机已死,则它不再参与TCP连接对话框,并且唯一的通知方式是连接超时.

您可以减少套接字上的保持活动时间,以更早地“通知”问题,但这通常不是一个好的解决方案.

如果要监视主机,请以适合您的频率发送简短的“ ping”消息.如果另一侧在给定的间隔内没有应答,则可以将其声明为“已死”.

一旦发现连接中断,关闭套接字就足以释放与该套接字关联的所有内核资源.

如果您还分配了其他资源(例如会话信息),则还需要释放这些资源.为此,编写一个函数(并在建立连接时分配这些资源)确实是个好主意,以便所有簿记工作都在同一地点并且易于检查.

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

(无论如何,在Linux中,“看门狗定时器”一词用于硬件监视设备.这不是搜索与网络/ TCP相关的东西的好术语.)

标签:tcp,network-programming,timer,c-3,linux
来源: https://codeday.me/bug/20191102/1992687.html