监视套接字描述符

Monitoring Socket descriptors

本文关键字:描述 套接字 监视      更新时间:2023-10-16

我有一个应用程序,它一次打开了许多套接字描述符。我想监视这些只是针对任何活动,并关闭一段时间没有看到任何活动的描述符。我有一些解决方案,但不确定这是否可以通过防火墙规则完成。我不想浪费精力通过某些系统服务或配置来实现的事情。

它必须在基于 Linux 的系统上完成。

我想到的解决方案是使用timerfd_create并在描述符上使用计时器来监视所有活动套接字。任何以更好的方式实现这一目标的建议都会有所帮助。提前谢谢。

使用 select() 来监视套接字,手册页末尾有一个示例。基本上,您将文件描述符添加到fd_set并调用它返回select()当可以读取或写入其中一个受监视的文件描述符时,或者如果您设置了超时,则可以使用具有小超时的 select 来检查计时器回调中的 fd 并关闭尚未准备好的 fd。

我在timerfd.h中使用了timerfd_create和timerfd_settime api。检测关闭套接字的另一个选项是 sysconf 中的keep_alive超时。keep_alive超时没有多大帮助,以防套接字处于活动状态但没有活动,因此不得不使用较早的选项。