【问题标题】:Monitoring Socket descriptors监控套接字描述符
【发布时间】:2012-11-18 13:50:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ c linux monitoring


    【解决方案1】:

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

    【讨论】:

    • 我正在使用 epoll 来监控文件描述符的任何变化。我的问题是我可以使用 select 或 epoll 来更改文件描述符。我的问题是如何获取非活动描述符的通知,以便可以关闭它们。可以通过在描述符上设置计时器或者有其他更好的方法来实现。
    • @AdnanAkbar 你应该在你的问题中提到过,如果你设置了计时器,你仍然可以使用 select 来执行此操作,如果它没有返回任何内容然后关闭 fd,则调用 select 时有一个小的超时。
    【解决方案2】:

    我在 timerfd.h 中使用了 timerfd_create 和 timerfd_settime api。检测已关闭套接字的其他选项是 sysconf 中的 keep_alive 超时。如果套接字处于活动状态但没有活动,keep_alive 超时没有太大帮助,因此必须使用较早的选项。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 2012-11-02
      • 1970-01-01
      • 2014-04-25
      • 2011-03-31
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多