|
Boost Users : |
Subject: Re: [Boost-users] [asio] negating address_configured
From: Juraj Ivanèiæ (juraj.ivancic_at_[hidden])
Date: 2011-03-05 18:15:46
On 4.3.2011 14:52, Alexander Lamaison wrote:
> On Fri, 04 Mar 2011 14:30:36 +0100, Juraj Ivanèiæ wrote:
>> On 4.3.2011 11:48, Alexander Lamaison wrote:
>>> What is the correct way to negate the (default) resolver flag,
>>> address_configured?
>>>
>>> On Windows, at least, specifying address_configured (which translates to
>>> AI_ADDRCONFIG) has a nasty side effect. If the 'external' network is down,
>>> the resolver can no longer resolve the "localhost" address. More here
>>> http://src.chromium.org/viewvc/chrome/trunk/src/net/base/host_resolver.cc?r1=16212&r2=16211
>>>
>>> address_configured is the default flag for ip::basic_resolver_query so I
>>> need to specify a flag that turns it off. In the underlying addrinfo
>>> struct this would just mean specifying 0 as the flag but that isn't an
>>> option with ASIO as far as I can tell. How would I do this?
>>
>> I ran into this problem, and came up with the following workaround:
>>
>> boost::asio::ip::tcp::resolver::query query(
>> hostname,
>> port,
>> boost::asio::ip::tcp::resolver::query::all_matching
>> );
>
> Doesn't all_matching have it's own meaning? In other words, doesn't
> getaddrinfo behave differently when given 0 as its flags rather than
> AI_ALL?
>
> MSDN says "If the AI_ALL bit is set, a request is made for IPv6 addresses
> and IPv4 addressses with AI_V4MAPPED." which is as clear as mud to me.
Not 100% sure anymore, but I think that I just wanted to avoid
AI_ADDRCONFIG flag for the same reason as you, and this did
the trick. Of course, if you prefer, you can always pass 0 statically
cast to boost::asio::ip::tcp::resolver::query::flags.
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net