[ntp:questions] Pool returns IPv6 address to IPv4 query

Brian Utterback brian.utterback at oracle.com
Wed Nov 20 15:07:00 UTC 2013


On 11/20/2013 4:44 AM, Rob wrote:
> Brian Utterback <brian.utterback at oracle.com> wrote:
>> On 11/19/2013 3:40 PM, Danny Mayer wrote:
>>> You should not be using literal IP addresses of either flavor without
>>> also setting the AI_NUMERICHOST flag otherwise it tries to do a DNS
>>> lookup. That's poorly written code otherwise.
>>>
>>> Danny
>> Not so. The getaddrinfo function will recognize literal addresses and
>> merely convert them. The point is that for something like ssh or any
>> other network utility, the user is supposed to give a hostname, but in
>> virtually all cases you can give a literal address and the application
>> does not have to treat it differently. If you read the ipng mailing
>> list, you will see that they were trying to make the whole process of
>> writing a network application simpler, with getaddrinfo doing the heavy
>> lifting for all of the major cases. At the same time they were trying to
>> allow applications to work on either IPv4 or IPv6 systems without
>> changing them, or dual stack or any combination. But no matter what they
>> did there were edge cases that needed to work differently.
>>
>> Brian Utterback
> Well most of it was successfull, I converted an application from the
> old functions to getaddrinfo/getnameinfo etc, and it really is more
> convenient to program for.
>
> However, what I don't understand is why an IPv6 address does not fit
> into a struct sockaddr, and why this fact is so badly documented.
> It took me a lot of time to find why my queried IPv6 addresses were
> truncated.
>

It is a little tricky to be sure. Part of it was backwards compatibility 
and history, part of it was providing the proper abstractions. The root 
cause of course is that IPv6 addresses are longer than IPv4 addresses. 
If you use them properly, you should never have a problem with 
truncation though. You would have to be trying to put a IPv6 address 
into a IPv4 sockaddr for that to happen.

Brian Utterback


More information about the questions mailing list