- struct event timeout_event;
- struct event sighup_event;
- struct event sigterm_event;
- struct event sigquit_event;
-
- timeout_set(&timeout_event, timeout_handler, &timeout_event);
- event_add(&timeout_event, &(struct timeval){pingtimeout, 0});
-
-#ifdef SIGHUP
- signal_set(&sighup_event, SIGHUP, sighup_handler, NULL);
- signal_add(&sighup_event, NULL);
-#endif
-#ifdef SIGTERM
- signal_set(&sigterm_event, SIGTERM, sigterm_handler, NULL);
- signal_add(&sigterm_event, NULL);
-#endif
-#ifdef SIGQUIT
- signal_set(&sigquit_event, SIGQUIT, sigterm_handler, NULL);
- signal_add(&sigquit_event, NULL);
+ timeout_t pingtimer = {{0}};
+ timeout_t periodictimer = {{0}};
+
+ timeout_add(&pingtimer, timeout_handler, &pingtimer, &(struct timeval){pingtimeout, rand() % 100000});
+ timeout_add(&periodictimer, periodic_handler, &periodictimer, &(struct timeval){pingtimeout, rand() % 100000});
+
+#ifndef HAVE_MINGW
+ signal_t sighup = {0};
+ signal_t sigterm = {0};
+ signal_t sigquit = {0};
+ signal_t sigint = {0};
+ signal_t sigalrm = {0};
+
+ signal_add(&sighup, sighup_handler, &sighup, SIGHUP);
+ signal_add(&sigterm, sigterm_handler, &sigterm, SIGTERM);
+ signal_add(&sigquit, sigterm_handler, &sigquit, SIGQUIT);
+ signal_add(&sigint, sigterm_handler, &sigint, SIGINT);
+ signal_add(&sigalrm, sigalrm_handler, &sigalrm, SIGALRM);