epoll_wait和改变系统时间

时间:2015-04-28 16:57:59

标签: linux embedded-linux epoll

我的应用使用epoll_wait为IO事件执行定时等待。如果没有事件发生,epoll_wait应该在超时后返回,我的应用程序继续。

在测试期间,有人将系统时钟调回一天,使用epoll_wait的应用程序部分停止工作24小时。显然,这是一个问题。

我一直在四处寻找可能让我的应用知道时间已经改变的东西(例如,一个信号),但我还没找到任何东西。

有没有办法处理像这样的突然时间变化?

2 个答案:

答案 0 :(得分:1)

使用基于单调时间的计时器(例如,timer_create(2))来生成信号并执行阻塞epoll_wait,并检查-1返回码并将errno设置为EINTR。

答案 1 :(得分:0)

epoll_wait的Linux内核implementation使用CLOCK_MONOTONIC,因此它应该不受系统时钟变化的影响。 (我调查过这个问题,因为我看到了类似的问题,并希望将epoll_wait作为一个可能的原因进行折扣。)在v2.6.37之前,它过去常常使用单调的jiffies。

我已向epoll_wait手册页提交patch以澄清此问题。