projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
src/liboping/liboping.c: Fix a problem with strict aliasing.
[collectd.git]
/
src
/
liboping
/
liboping.c
diff --git
a/src/liboping/liboping.c
b/src/liboping/liboping.c
index
debd432
..
fb3f843
100644
(file)
--- a/
src/liboping/liboping.c
+++ b/
src/liboping/liboping.c
@@
-537,7
+537,17
@@
static ssize_t ping_sendto (pingobj_t *obj, pinghost_t *ph,
(struct sockaddr *) ph->addr, ph->addrlen);
if (ret < 0)
(struct sockaddr *) ph->addr, ph->addrlen);
if (ret < 0)
+ {
+#if defined(EHOSTUNREACH)
+ if (errno == EHOSTUNREACH)
+ return (0);
+#endif
+#if defined(ENETUNREACH)
+ if (errno == ENETUNREACH)
+ return (0);
+#endif
ping_set_error (obj, "sendto", strerror (errno));
ping_set_error (obj, "sendto", strerror (errno));
+ }
return (ret);
}
return (ret);
}
@@
-911,9
+921,6
@@
int ping_host_add (pingobj_t *obj, const char *host)
{
pinghost_t *ph;
{
pinghost_t *ph;
- struct sockaddr_storage sockaddr;
- socklen_t sockaddr_len;
-
struct addrinfo ai_hints;
struct addrinfo *ai_list, *ai_ptr;
int ai_return;
struct addrinfo ai_hints;
struct addrinfo *ai_list, *ai_ptr;
int ai_return;
@@
-972,30
+979,13
@@
int ping_host_add (pingobj_t *obj, const char *host)
{
ph->fd = -1;
{
ph->fd = -1;
- sockaddr_len = sizeof (sockaddr);
- memset (&sockaddr, '\0', sockaddr_len);
-
if (ai_ptr->ai_family == AF_INET)
{
if (ai_ptr->ai_family == AF_INET)
{
- struct sockaddr_in *si;
-
- si = (struct sockaddr_in *) &sockaddr;
- si->sin_family = AF_INET;
- si->sin_port = htons (ph->ident);
- si->sin_addr.s_addr = htonl (INADDR_ANY);
-
ai_ptr->ai_socktype = SOCK_RAW;
ai_ptr->ai_protocol = IPPROTO_ICMP;
}
else if (ai_ptr->ai_family == AF_INET6)
{
ai_ptr->ai_socktype = SOCK_RAW;
ai_ptr->ai_protocol = IPPROTO_ICMP;
}
else if (ai_ptr->ai_family == AF_INET6)
{
- struct sockaddr_in6 *si;
-
- si = (struct sockaddr_in6 *) &sockaddr;
- si->sin6_family = AF_INET6;
- si->sin6_port = htons (ph->ident);
- si->sin6_addr = in6addr_any;
-
ai_ptr->ai_socktype = SOCK_RAW;
ai_ptr->ai_protocol = IPPROTO_ICMPV6;
}
ai_ptr->ai_socktype = SOCK_RAW;
ai_ptr->ai_protocol = IPPROTO_ICMPV6;
}