X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Flibcollectdclient%2Fnetwork.c;h=2f296f645691ffc9764b4c6e4f56fb8df63a07e1;hb=8b4fed9940e02138b7e273e56863df03d1a39ef7;hp=02a8e966b99d4b61ab604c2f2e591fb93c6300d6;hpb=1d265d7a570e13c6719853adef6b513d2a15fea8;p=collectd.git diff --git a/src/libcollectdclient/network.c b/src/libcollectdclient/network.c index 02a8e966..2f296f64 100644 --- a/src/libcollectdclient/network.c +++ b/src/libcollectdclient/network.c @@ -24,6 +24,8 @@ * Florian octo Forster **/ +#include "collectd.h" + #include #include #include @@ -35,6 +37,10 @@ #include #include +#if HAVE_NETINET_IN_H +# include +#endif + #include "collectd/network.h" #include "collectd/network_buffer.h" @@ -77,6 +83,7 @@ static int server_close_socket (lcc_server_t *srv) /* {{{ */ return (0); close (srv->fd); + srv->fd = -1; free (srv->sa); srv->sa = NULL; srv->sa_len = 0; @@ -95,12 +102,6 @@ static void int_server_destroy (lcc_server_t *srv) /* {{{ */ next = srv->next; - if (srv->fd >= 0) - { - close (srv->fd); - srv->fd = -1; - } - free (srv->node); free (srv->service); free (srv->username); @@ -142,7 +143,6 @@ static int server_open_socket (lcc_server_t *srv) /* {{{ */ if (ai_ptr->ai_family == AF_INET) { - struct sockaddr_in *addr = (struct sockaddr_in *) ai_ptr->ai_addr; int optname; @@ -151,9 +151,8 @@ static int server_open_socket (lcc_server_t *srv) /* {{{ */ else optname = IP_TTL; - setsockopt (srv->fd, IPPROTO_IP, optname, - &srv->ttl, - sizeof (srv->ttl)); + status = setsockopt (srv->fd, IPPROTO_IP, optname, + &srv->ttl, sizeof (srv->ttl)); } else if (ai_ptr->ai_family == AF_INET6) { @@ -166,9 +165,15 @@ static int server_open_socket (lcc_server_t *srv) /* {{{ */ else optname = IPV6_UNICAST_HOPS; - setsockopt (srv->fd, IPPROTO_IPV6, optname, - &srv->ttl, - sizeof (srv->ttl)); + status = setsockopt (srv->fd, IPPROTO_IPV6, optname, + &srv->ttl, sizeof (srv->ttl)); + } + if (status != 0) + { + /* setsockopt failed. */ + close (srv->fd); + srv->fd = -1; + continue; } srv->sa = malloc (ai_ptr->ai_addrlen);