将超时值设置为套接字轮询/选择的最佳做法是什么?

时间:2017-03-14 03:10:38

标签: c++ multithreading sockets polling epoll

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

我的案例详情 -

我有一个调度程序线程监听所有连接。一旦连接变为就绪,我将其禁用以进行轮询,并将connfd转发到线程池处理读取。调度程序线程返回轮询。

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

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

1 个答案:

答案 0 :(得分:0)

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

当需要显式定时器操作时,基本上会使用超时(某些异步IO库会为您处理此事件)。

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

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