aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2008-11-01 23:49:54 +0000
committerDaniel Stenberg <daniel@haxx.se>2008-11-01 23:49:54 +0000
commit85ffd33f087640bf43fe974cf4c70ad2c3929312 (patch)
treeff034d904b100bd00042184754bbae45ff932ca0
parentc1b8e93083e22c263232d91d00c7d537dbf4a85b (diff)
Daniel Johnson reported and fixed ipv4 name resolves when libcurl is built
with ipv6-enabled c-ares
-rw-r--r--CHANGES20
-rw-r--r--RELEASE-NOTES5
-rw-r--r--lib/hostares.c5
3 files changed, 28 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index ad335f725..5b6c8976c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,26 @@
Changelog
+Daniel Stenberg (2 Nov 2008)
+- Daniel Johnson reported and fixed:
+
+ When c-ares isn't enabled, libcurl by default calls getaddrinfo with family
+ set to PF_UNSPEC which causes getaddrinfo to return all available addresses,
+ both IPv4 and IPv6. Libcurl then tries each one until it can connect. If the
+ net connection doesn't support IPv6, libcurl can still fall back to IPv4.
+
+ However, since c-ares doesn't support PF_UNSPEC, when it's used it defaults
+ to using family=PF_INET6 and therefore only returns IPv6 addresses when AAAA
+ records are available, even if IPv4 addresses are also available. The effect
+ is that since my ISP doesn't do IPv6, libcurl can't connect at all to a site
+ that has AAAA records. It will work if I explicitly use CURL_IPRESOLVE_V4 or
+ --ipv4 with the curl tool. I discovered this when curl would fail to connect
+ to seemingly random sites. It turns out they weren't random, they were sites
+ with AAAA records.
+
+ So now libcurl defaults to PF_INET... until c-ares has been tought to offer
+ both.
+
Daniel Fandrich (29 Oct 2008)
- Fixed a bug that caused a few bytes of garbage to be sent after a
curl_easy_pause() during a chunky upload. Reported by Steve Roskowski.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index 3e418f20d..86c4683be 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -41,6 +41,7 @@ This release includes the following bugfixes:
o case insensitive string matching works in Turkish too
o Solaris builds get _REENTRANT defined properly and work again
o Garbage sent on chunky upload after curl_easy_pause()
+ o ipv4 name resolves when libcurl is built with ipv6-enabled c-ares
This release includes the following known bugs:
@@ -57,6 +58,8 @@ advice from friends like these:
Linus Nielsen Feltzing, Martin Drasar, Stefan Krause, Dmitry Kurochkin,
Mike Revi, Andres Garcia, Michael Goffioul, Markus Moeller, Rob Crittenden,
Jamie Lokier, Emanuele Bovisio, Maxim Ivanov, Ian Lynagh, Daniel Egger,
- Igor Novoseltsev, John Wilkinson, Pascal Terjan, Steve Roskowski
+ Igor Novoseltsev, John Wilkinson, Pascal Terjan, Steve Roskowski,
+ Daniel Johnson
+
Thanks! (and sorry if I forgot to mention someone)
diff --git a/lib/hostares.c b/lib/hostares.c
index d7dceaa1d..f17cdf5ec 100644
--- a/lib/hostares.c
+++ b/lib/hostares.c
@@ -399,9 +399,12 @@ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
switch(data->set.ip_version) {
case CURL_IPRESOLVE_V4:
+ default: /* By default we try ipv4, as PF_UNSPEC isn't supported by c-ares.
+ This is a bit disturbing since users may very well assume that
+ both kinds of addresses are asked for, but the problem is really
+ in c-ares' end here. */
family = PF_INET;
break;
- default: /* by default we try ipv6, as PF_UNSPEC isn't supported by (c-)ares */
case CURL_IPRESOLVE_V6:
family = PF_INET6;
break;