diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2011-06-13 12:53:22 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2011-08-15 13:34:20 +0200 |
commit | bb4096effef7f0001339669a4abf9448ec1f8743 (patch) | |
tree | 1672c9dfcd5450179ec19d97a12357e03b16cfd3 /ares_gethostbyname.c | |
parent | 1b9c2a3ea31cfd6f69e20e92af4da86339f0bfed (diff) | |
download | c-ares-bb4096effef7f0001339669a4abf9448ec1f8743.tar.gz c-ares-bb4096effef7f0001339669a4abf9448ec1f8743.tar.bz2 c-ares-bb4096effef7f0001339669a4abf9448ec1f8743.zip |
Only fall back to AF_INET searches when looking for AF_UNSPEC addresses
Diffstat (limited to 'ares_gethostbyname.c')
-rw-r--r-- | ares_gethostbyname.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/ares_gethostbyname.c b/ares_gethostbyname.c index 72f8f8b..ad89dc2 100644 --- a/ares_gethostbyname.c +++ b/ares_gethostbyname.c @@ -194,11 +194,11 @@ 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 || status == ARES_EBADRESP) { + if ((status == ARES_ENODATA || status == ARES_EBADRESP) && + hquery->want_family == AF_UNSPEC) { /* 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. */ + looking up A instead. */ hquery->sent_family = AF_INET; ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, hquery); @@ -210,11 +210,10 @@ static void host_callback(void *arg, int status, int timeouts, end_hquery(hquery, status, host); } else if ((status == ARES_ENODATA || status == ARES_EBADRESP || - status == ARES_ETIMEOUT) && hquery->sent_family == AF_INET6) + status == ARES_ETIMEOUT) && (hquery->sent_family == AF_INET6 && + hquery->want_family == AF_UNSPEC)) { - /* 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. */ + /* The AAAA query yielded no useful result. Now look up an A instead. */ hquery->sent_family = AF_INET; ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, hquery); |