Subject: Re: IPv6 with gethostbyname2 and gethostbyaddr
To: None <tech-net@netbsd.org>
From: der Mouse <mouse@Rodents.Montreal.QC.CA>
List: tech-net
Date: 07/05/2002 04:50:00
> I read that gethostbyname2 and gethostbyaddr for IPv6 is being
> deprecated and that I should use getaddrinfo or getnodebyname
> instead.  And inet_aton manual recommends getaddrinfo and getnameinfo
> for IPv6.

> But how can I get gethostbyname2 and gethostbyaddr to work for IPv6?

Why would you want to?  Why _not_ use getnameinfo and getaddrinfo?

> Here are some examples:

>  $ ./a.out -6 ::1
>  Hostname: ::1
>  Address: 0.0.0.0

Well, yes, the first four octets of ::1 are zero.  What's surprising
about this?

>  $ ./a.out -6 localhost
>  Hostname: localhost
>  Address: 0.0.0.0

> I wanted the above to return:
>  Hostname: localhost
>  Address: ::1

Then you need to print it out correctly.  The printf responsible for
that line reads

>             printf("Address: %u.%u.%u.%u\n",
>                     (0xff & h->h_addr_list[idx][0]),
>                     (0xff & h->h_addr_list[idx][1]),
>                     (0xff & h->h_addr_list[idx][2]),
>                     (0xff & h->h_addr_list[idx][3]) );

and I am not really able to comprehend any mindset that expects that to
_ever_ print "Address: ::1".

You are also using sockaddr_in and inet_aton, which are IPv4-only.
(I'm not sure about gethostbyaddr(), but I think it too may be
v4-only.)

/~\ The ASCII				der Mouse
\ / Ribbon Campaign
 X  Against HTML	       mouse@rodents.montreal.qc.ca
/ \ Email!	     7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B