if (verbose) printf("INFO: Host %s stopped responding. Executing DOWN command.\n", host->name);
host->host_up = false;
if (!fork()) {
- system(host->down_cmd);
- exit(EXIT_SUCCESS);
+ int sys_ret = system(host->down_cmd);
+ exit(sys_ret);
}
}
if (verbose) printf("INFO: Host %s started responding. Executing UP command.\n", host->name);
host->host_up = true;
if (!fork()) {
- system(host->up_cmd);
- exit(EXIT_SUCCESS);
+ int sys_ret = system(host->up_cmd);
+ exit(sys_ret);
}
}
} else {
return result;
}
-size_t
-gcd(const size_t x, const size_t y)
-{
- size_t remainder = x % y;
- if (remainder == 0) return y;
- return gcd(y, remainder);
-}
-
void
remove_host_from_list(struct host_entry * host)
{
}
if (first_host_in_list == NULL) {
fprintf(stderr, "ERROR: Unable to parse a config file.\n");
+ print_usage(argv);
exit(EXIT_FAILURE);
}
}
int
main(int argc, char ** argv)
{
+ /* Parse the command line options, load and parse the config file. */
parse_params(argc, argv);
+ /* Process config for each host, generating/verifying any necessary information. */
init_hosts();
+ /* Make sure initialization left us with something useful. */
+ assert(first_host_in_list);
+
+ /* Pings are sent asynchronously. */
signal(SIGALRM, pinger);
alarm(TIMER_RESOLUTION);
+ /* The main program loop listens for ping responses. */
get_response();
+ /* Should be unreachable. */
exit(EXIT_SUCCESS);
}