* February 3 2009 (Phil Blundell)

- If the server returns garbage or nothing at all in response to an AAAA query,
  go on and ask for A records anyway.
pull/1/head
Phil Blundell 16 years ago
parent 1ce8e6583e
commit 3f7fc80ab5
  1. 4
      CHANGES
  2. 14
      ares_gethostbyname.c

@ -1,5 +1,9 @@
Changelog for the c-ares project
* February 3 2009 (Phil Blundell)
- If the server returns garbage or nothing at all in response to an AAAA query,
go on and ask for A records anyway.
* January 31 2009 (Daniel Stenberg)
- ares_gethostbyname() now accepts 'AF_UNSPEC' as a family for resolving
either AF_INET6 or AF_INET. It works by accepting any of the looksups in the

@ -194,10 +194,10 @@ static void host_callback(void *arg, int status, int timeouts,
else if (hquery->sent_family == AF_INET6)
{
status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL);
if (status == ARES_ENODATA) {
/* The query returned something (e.g. CNAME) but there were no
AAAA records. Try looking up A instead. We should possibly
limit this attempt-next logic to AF_UNSPEC lookups only. */
if (status == ARES_ENODATA || status == ARES_EBADRESP) {
/* The query returned something but either there were no AAAA records (e.g. just CNAME)
or the response was malformed. Try looking up A instead.
We should possibly limit this attempt-next logic to AF_UNSPEC lookups only. */
hquery->sent_family = AF_INET;
ares_search(hquery->channel, hquery->name, C_IN, T_A,
host_callback, hquery);
@ -208,10 +208,10 @@ static void host_callback(void *arg, int status, int timeouts,
}
end_hquery(hquery, status, host);
}
else if (status == ARES_ENODATA && hquery->sent_family == AF_INET6)
else if ((status == ARES_ENODATA || status == ARES_EBADRESP || status == ARES_ETIMEOUT) && hquery->sent_family == AF_INET6)
{
/* There was no AAAA. Now lookup an A. We should possibly limit this
attempt-next logic to AF_UNSPEC lookups only. */
/* The AAAA query yielded no useful result. Now look up an A instead.
We should possibly limit this attempt-next logic to AF_UNSPEC lookups only. */
hquery->sent_family = AF_INET;
ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback,
hquery);

Loading…
Cancel
Save