return (ptr);
}
+ #ifndef ICMP6_ECHO_REQUEST
+ # ifdef ICMP6_ECHO /* AIX netinet/ip6_icmp.h */
+ # define ICMP6_ECHO_REQUEST ICMP6_ECHO
+ # else
+ # define ICMP6_ECHO_REQUEST 128
+ # endif
+ #endif
+
+ #ifndef ICMP6_ECHO_REPLY
+ # ifdef ICMP6_ECHOREPLY /* AIX netinet/ip6_icmp.h */
+ # define ICMP6_ECHO_REPLY ICMP6_ECHOREPLY
+ # else
+ # define ICMP6_ECHO_REPLY 129
+ # endif
+ #endif
+
static pinghost_t *ping_receive_ipv6 (pinghost_t *ph, char *buffer, size_t buffer_len)
{
struct icmp6_hdr *icmp_hdr;
ph->addr = (struct sockaddr_storage *) (ph->timer + 1);
ph->addrlen = sizeof (struct sockaddr_storage);
+ ph->fd = -1;
ph->latency = -1.0;
ph->ident = ping_get_ident () & 0xFFFF;
static void ping_free (pinghost_t *ph)
{
+ if (ph->fd >= 0)
+ close (ph->fd);
+
if (ph->hostname != NULL)
free (ph->hostname);
if (ph->fd < 0)
{
- free (ph->hostname);
- free (ph);
+ ping_free (ph);
return (-1);
}
else
pre->next = cur->next;
- if (cur->fd >= 0)
- close (cur->fd);
-
ping_free (cur);
return (0);
{
case PING_INFO_HOSTNAME:
ret = ENOMEM;
- *buffer_len = strlen (iter->hostname);
+ *buffer_len = strlen (iter->hostname) + 1;
if (orig_buffer_len <= *buffer_len)
break;
/* Since (orig_buffer_len > *buffer_len) `strncpy'