/**
* collectd - src/libcollectdclient/network.c
- * Copyright (C) 2005-2013 Florian Forster
+ * Copyright (C) 2005-2015 Florian Forster
* Copyright (C) 2010 Max Henkel
*
* Permission is hereby granted, free of charge, to any person obtaining a
return (0);
close (srv->fd);
+ srv->fd = -1;
free (srv->sa);
srv->sa = NULL;
srv->sa_len = 0;
next = srv->next;
- if (srv->fd >= 0)
- {
- close (srv->fd);
- srv->fd = -1;
- }
-
free (srv->node);
free (srv->service);
free (srv->username);
if (ai_ptr->ai_family == AF_INET)
{
-
struct sockaddr_in *addr = (struct sockaddr_in *) ai_ptr->ai_addr;
int optname;
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)
{
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);
memset (buffer, 0, sizeof (buffer));
buffer_size = sizeof (buffer);
- lcc_network_buffer_finalize (srv->buffer);
+ status = lcc_network_buffer_finalize (srv->buffer);
+ if (status != 0)
+ {
+ lcc_network_buffer_initialize (srv->buffer);
+ return (status);
+ }
+
status = lcc_network_buffer_get (srv->buffer, buffer, &buffer_size);
lcc_network_buffer_initialize (srv->buffer);