X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fntpd.c;h=ecc87c78977dbbdde88e920aa5f6156a1060fc0d;hb=8eb9e6285f394569d7fe6ad43a0f4e5f9bca454f;hp=4bc3139c74c17e12580a811ddc797f7e0d19c332;hpb=354931fdbe1796bb6c5ba5b687875aeb8df9af6f;p=collectd.git diff --git a/src/ntpd.c b/src/ntpd.c index 4bc3139c..ecc87c78 100644 --- a/src/ntpd.c +++ b/src/ntpd.c @@ -19,6 +19,8 @@ * Florian octo Forster **/ +#define _BSD_SOURCE /* For NI_MAXHOST */ + #include "collectd.h" #include "common.h" #include "plugin.h" @@ -276,9 +278,7 @@ static int ntpd_config (const char *key, const char *value) } else if (strcasecmp (key, "ReverseLookups") == 0) { - if ((strcasecmp (value, "True") == 0) - || (strcasecmp (value, "Yes") == 0) - || (strcasecmp (value, "On") == 0)) + if (IS_TRUE (value)) do_reverse_lookups = 1; else do_reverse_lookups = 0; @@ -300,7 +300,6 @@ static void ntpd_submit (char *type, char *type_inst, double value) vl.values = values; vl.values_len = 1; - vl.time = time (NULL); sstrncpy (vl.host, hostname_g, sizeof (vl.host)); sstrncpy (vl.plugin, "ntpd", sizeof (vl.plugin)); sstrncpy (vl.plugin_instance, "", sizeof (vl.plugin_instance)); @@ -310,31 +309,6 @@ static void ntpd_submit (char *type, char *type_inst, double value) plugin_dispatch_values (&vl); } -/* returns `tv0 - tv1' in milliseconds or 0 if `tv1 > tv0' */ -static int timeval_sub (const struct timeval *tv0, const struct timeval *tv1) -{ - int sec; - int usec; - - if ((tv0->tv_sec < tv1->tv_sec) - || ((tv0->tv_sec == tv1->tv_sec) && (tv0->tv_usec < tv1->tv_usec))) - return (0); - - sec = tv0->tv_sec - tv1->tv_sec; - usec = tv0->tv_usec - tv1->tv_usec; - - while (usec < 0) - { - usec += 1000000; - sec -= 1; - } - - if (sec < 0) - return (0); - - return ((sec * 1000) + ((usec + 500) / 1000)); -} - static int ntpd_connect (void) { char *host; @@ -459,6 +433,8 @@ static int ntpd_receive_response (int *res_items, int *res_size, done = 0; while (done == 0) { + struct timeval time_left; + if (gettimeofday (&time_now, NULL) < 0) { char errbuf[1024]; @@ -467,8 +443,14 @@ static int ntpd_receive_response (int *res_items, int *res_size, return (-1); } + if (timeval_cmp (time_end, time_now, &time_left) <= 0) + timeout = 0; + else + timeout = 1000 * time_left.tv_sec + + ((time_left.tv_usec + 500) / 1000); + /* timeout reached */ - if ((timeout = timeval_sub (&time_end, &time_now)) == 0) + if (timeout <= 0) break; poll_s.fd = sd;