+ for list_each(connection_t, c, connection_list) {
+ if(c->status.control)
+ continue;
+
+ xasprintf(&fname, "%s" SLASH "hosts" SLASH "%s", confbase, c->name);
+ struct stat s;
+ if(stat(fname, &s) || s.st_mtime > last_config_check) {
+ logger(DEBUG_CONNECTIONS, LOG_INFO, "Host config file of %s has been changed", c->name);
+ terminate_connection(c, c->status.active);
+ }
+ free(fname);
+ }
+
+ last_config_check = time(NULL);
+
+ return 0;
+}
+
+void retry(void) {
+ for list_each(connection_t, c, connection_list) {
+ if(c->outgoing && !c->node) {
+ if(timeout_initialized(&c->outgoing->ev))
+ event_del(&c->outgoing->ev);
+ if(c->status.connecting)
+ close(c->socket);
+ c->outgoing->timeout = 0;
+ terminate_connection(c, c->status.active);
+ }
+ }
+}
+
+/*
+ this is where it all happens...
+*/
+int main_loop(void) {
+ struct event timeout_event;
+
+ timeout_set(&timeout_event, timeout_handler, &timeout_event);
+ event_add(&timeout_event, &(struct timeval){pingtimeout, 0});
+
+#ifndef HAVE_MINGW
+ struct event sighup_event;
+ struct event sigterm_event;
+ struct event sigquit_event;
+ struct event sigalrm_event;
+
+ signal_set(&sighup_event, SIGHUP, sighup_handler, NULL);
+ signal_add(&sighup_event, NULL);
+ signal_set(&sigterm_event, SIGTERM, sigterm_handler, NULL);
+ signal_add(&sigterm_event, NULL);
+ signal_set(&sigquit_event, SIGQUIT, sigterm_handler, NULL);
+ signal_add(&sigquit_event, NULL);
+ signal_set(&sigalrm_event, SIGALRM, sigalrm_handler, NULL);
+ signal_add(&sigalrm_event, NULL);