I think I have already addressed all your points below, no need to
rehash endlessly. I'll let others chime in.

I'm still very interested in any real-world problems this might have caused.

Simon

Le 2014-05-02 11:35, Jérémie Courrèges-Anglas a écrit :
> Simon Perreault <si...@per.reau.lt> writes:
> 
>> Le 2014-05-02 10:48, Jérémie Courrèges-Anglas a écrit :
>>> Let's say you have a machine with no IPv6 address configured (or rather,
>>> only link-local addresses configured and ::1 on lo0). With the
>>> AI_ADDRCONFIG flag (either set explicitely or assumed if the caller
>>> passes no hints structure):
>>>
>>> - getaddrinfo("fe80::...%em0") fails with "no address associated with name"
>>> - getaddrinfo("::1") fails similarly
>>> - more generally, getaddrinfo("numeric IPv6 address") fails with "no
>>>   address associated with that name"
>>> - getaddrinfo("localhost") now requires IPv4/v6 connectivity on non-lo
>>>   interfaces.  oops.
>>>
>>> All those are IMHO poor behavior (lies), especially since getaddrinfo is
>>> supposed to handle pretty much anything you're throwing at it.
>>
>> I think you need to change your expectations.
> 
> I don't think that any of the failing examples given above can qualify
> as "reasonable expectation".
> 
>> If you're running on a host without IPv6, why would you want
>> getaddrinfo() to return any IPv6 results? What good would it do to you?
> 
> What's a regular OpenBSD host with no IPv6?  I'd assume that it is
> a host that can perform IPv6 connections to ::1 / localhost and reach
> its neighbors through link-local addresses.  It is certainly not a host
> that has been butchered by removing option INET6 or removing all
> automatically configured IPv6 address (link-local / lo0).
> 
> If you pass a raw IPv6 address to getaddrinfo, is "no address associated
> with name" a reasonable result?
> 
>> AI_ADDRCONFIG is all about what it *returns*. The fact that it allows
>> skipping DNS AAAA requests is a nice side-effect.
> 
> Yet people use it for this side-effect, else why would you propose to
> make the base programs use it (explicitely) as a way to mitigate the
> impact of switching to "family inet6 inet4" by default?
> 
>> If your program needs to resolve addresses for the sake of resolving
>> addresses, and you want accuracy,
> 
> I think that I've clearly explained that it is more than mere accuracy.
> 
>> you need to explicitly unset
>> AI_ADDRCONFIG. You're writing something special. In the general case,
>> where you will just connect() or bind() on the returned addresses,
>> AI_ADDRCONFIG makes sense as is.
>>
>> Has this caused any real-world problems?
> 
> All the examples I've listed above are cases where programs that used no
> hints will now fail.  I think they're valid, real-world cases.
> 

Reply via email to