Kernel 不支持 timerfd 使用 timeout

VPS 内核版本较低,低到还没实现 timerfd。由于是 OpenVZ 的方案,基本上是无法更新 Kernel 的。有一个必要应用正好要使用 HevLib 库的 HevEventSourceTimeout,此 source 是基于 timerfd 的,临时的解决方法是使用 HevEventSourceSignal 监听 SIGALRM 信号, 使用 alarm 或 ualaram 设置定时器:

#include <stdio.h>
#include <signal.h>
#include <hev-lib.h>
 
static bool
signal_handler (void *data)
{
        printf ("timeout signal\n");
 
        alarm (1);
 
        return true;
}
 
int
main (int argc, char *argv[])
{
        HevEventLoop *loop = NULL;
        HevEventSource *signal = NULL;
 
        loop = hev_event_loop_new ();
 
        signal = hev_event_source_signal_new (SIGALRM);
        hev_event_source_set_callback (signal, signal_handler, NULL, NULL);
        hev_event_loop_add_source (loop, signal);
        hev_event_source_unref (signal);
 
        alarm (1);
 
        hev_event_loop_run (loop);
 
        hev_event_loop_unref (loop);
 
        return 0;
}

Over!

Leave a Reply

Your email address will not be published. Required fields are marked *