【问题标题】:What is the best practice for setting a timeout value to socket poll/select?为套接字轮询/选择设置超时值的最佳做法是什么?
【发布时间】:2017-03-14 03:10:38
【问题描述】:

我正在使用轮询机制来管理多达 100 个连接。对于 poll() 调用的超时值应该是多少或如何确定它是否有任何标准做法。

我的案例详情 -

我有一个调度线程监听所有的连接。一旦连接准备好读取,我将禁用它以进行轮询并将 connfd 转发到处理读取的线程池。调度程序线程返回轮询。

线程池使用 connfd 上的读取并将其发送回调度程序,以便它可以添加它以进行下一步轮询。但是调度程序在从 poll() 调用返回之前无法将其添加到轮询中。我需要调度程序定期检查它是否需要重新启用对任何 connfd 的轮询。

什么是好的超时值,以便调度程序线程可以定期停止轮询并更新其 pollfd 列表。

【问题讨论】:

    标签: c++ multithreading sockets polling epoll


    【解决方案1】:

    您不需要使用超时(只需将其设置为INF)。

    Timeout 基本上在需要显式计时器操作时使用(一些异步 IO 库会为您处理)。

    要唤醒轮询中休眠的线程,请使用self-pipe trick。在 Linux 上,eventfd 也可以使用。

    使用timerfd(仅限Linux),可以完全取消超时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多