X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fntpd.c;h=e37b3a1cefad037e286dd4bde0cd640940740898;hb=fd909f8965b2b6714dc1da328c77f3681c04af5e;hp=40c2aa47053ad5629392fd5e48be2b368d5ba8a4;hpb=d27b44e0fb240cd4b48a7498b192a79e2d8c9ae1;p=collectd.git diff --git a/src/ntpd.c b/src/ntpd.c index 40c2aa47..e37b3a1c 100644 --- a/src/ntpd.c +++ b/src/ntpd.c @@ -51,8 +51,8 @@ #if HAVE_NETINET_TCP_H # include #endif -#if HAVE_SYS_POLL_H -# include +#if HAVE_POLL_H +# include #endif static char *config_keys[] = @@ -69,12 +69,12 @@ static char *time_dispersion_file = "ntpd/time_dispersion-%s.rrd"; static char *time_delay_file = "ntpd/delay-%s.rrd"; /* used for `time_offset', `time_dispersion', and `delay' */ -static char *ms_ds_def[] = +static char *sec_ds_def[] = { - "DS:ms:GAUGE:"COLLECTD_HEARTBEAT":-1000000:1000000", + "DS:seconds:GAUGE:"COLLECTD_HEARTBEAT":-1000000:1000000", NULL }; -static int ms_ds_num = 1; +static int sec_ds_num = 1; static char *frequency_offset_file = "ntpd/frequency_offset-%s.rrd"; static char *frequency_offset_ds_def[] = @@ -315,7 +315,7 @@ static void ntpd_init (void) return; } -static void ntpd_write_ms (char *host, char *inst, char *val, char *file) +static void ntpd_write_sec (char *host, char *inst, char *val, char *file) { char buf[256]; int status; @@ -325,22 +325,22 @@ static void ntpd_write_ms (char *host, char *inst, char *val, char *file) return; rrd_update_file (host, buf, val, - ms_ds_def, ms_ds_num); + sec_ds_def, sec_ds_num); } static void ntpd_write_time_offset (char *host, char *inst, char *val) { - ntpd_write_ms (host, inst, val, time_offset_file); + ntpd_write_sec (host, inst, val, time_offset_file); } static void ntpd_write_time_dispersion (char *host, char *inst, char *val) { - ntpd_write_ms (host, inst, val, time_dispersion_file); + ntpd_write_sec (host, inst, val, time_dispersion_file); } static void ntpd_write_delay (char *host, char *inst, char *val) { - ntpd_write_ms (host, inst, val, time_delay_file); + ntpd_write_sec (host, inst, val, time_delay_file); } static void ntpd_write_frequency_offset (char *host, char *inst, char *val) @@ -560,6 +560,9 @@ static int ntpd_receive_response (int req_code, int *res_items, int *res_size, if (status < 0) { DBG ("recv(2) failed: %s", strerror (errno)); + DBG ("Closing socket #%i", sd); + close (sd); + sock_descr = sd = -1; return (-1); } @@ -691,6 +694,7 @@ static int ntpd_receive_response (int req_code, int *res_items, int *res_size, (items_num + pkt_item_num) * res_item_size); items = realloc ((void *) *res_data, (items_num + pkt_item_num) * res_item_size); + items_num += pkt_item_num; if (items == NULL) { items = *res_data; @@ -758,7 +762,12 @@ static int ntpd_send_request (int req_code, int req_items, int req_size, char *r status = swrite (sd, (const char *) &req, REQ_LEN_NOMAC); if (status < 0) + { + DBG ("`swrite' failed. Closing socket #%i", sd); + close (sd); + sock_descr = sd = -1; return (status); + } return (0); } @@ -873,7 +882,7 @@ static void ntpd_read (void) struct info_peer_summary *ptr; double offset; - char peername[512]; + char peername[NI_MAXHOST]; int refclock_id; ptr = ps + i; @@ -889,8 +898,15 @@ static void ntpd_read (void) if (ptr->v6_flag) { - status = getnameinfo ((const struct sockaddr *) &ptr->srcadr6, - sizeof (ptr->srcadr6), + struct sockaddr_in6 sa; + + memset (&sa, 0, sizeof (sa)); + sa.sin6_family = AF_INET6; + sa.sin6_port = htons (123); + memcpy (&sa.sin6_addr, &ptr->srcadr6, sizeof (struct in6_addr)); + + status = getnameinfo ((const struct sockaddr *) &sa, + sizeof (sa), peername, sizeof (peername), NULL, 0, 0 /* no flags */); if (status != 0)