summaryrefslogtreecommitdiff
path: root/methods/connect.cc
diff options
context:
space:
mode:
authorDavid Kalnischkies <david@kalnischkies.de>2015-11-03 16:05:14 +0100
committerDavid Kalnischkies <david@kalnischkies.de>2015-11-04 18:42:28 +0100
commit23d35ec15a849ee755f51a99939b0131e8faefa5 (patch)
treeafd33d375029dd10dc29b4b9528c5809e32a4252 /methods/connect.cc
parentce1f3a2c616b86da657c1c796efa5f4d18c30c39 (diff)
allow getaddrinfo flag AI_ADDRCONFIG to be disabled
This flags is generally handy to avoid having to deal with ipv6 results on an ipv4-only system, but it prevents e.g. the testcases from working if the testsystem has no configured address at the moment (expect loopback), so allow it to be sidestepped and let the testcases sidestep it. Git-Dch: Ignore
Diffstat (limited to 'methods/connect.cc')
-rw-r--r--methods/connect.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/methods/connect.cc b/methods/connect.cc
index 171622fa5..b4cd17ca8 100644
--- a/methods/connect.cc
+++ b/methods/connect.cc
@@ -164,7 +164,12 @@ static bool ConnectToHostname(std::string const &Host, int const Port,
struct addrinfo Hints;
memset(&Hints,0,sizeof(Hints));
Hints.ai_socktype = SOCK_STREAM;
- Hints.ai_flags = AI_ADDRCONFIG;
+ Hints.ai_flags = 0;
+ // see getaddrinfo(3): only return address if system has such a address configured
+ // useful if system is ipv4 only, to not get ipv6, but that fails if the system has
+ // no address configured: e.g. offline and trying to connect to localhost.
+ if (_config->FindB("Acquire::Connect::AddrConfig", true) == true)
+ Hints.ai_flags |= AI_ADDRCONFIG;
Hints.ai_protocol = 0;
if(_config->FindB("Acquire::ForceIPv4", false) == true)