diff options
author | jorton <jorton@13f79535-47bb-0310-9956-ffa450edef68> | 2003-07-17 14:27:39 +0000 |
---|---|---|
committer | jorton <jorton@13f79535-47bb-0310-9956-ffa450edef68> | 2003-07-17 14:27:39 +0000 |
commit | eb85744ef4a3674f479bad5d2ef44fd1d6c85d33 (patch) | |
tree | 1d7ccedb26d1343abe7b351bc0f7078b87e09ad5 /network_io | |
parent | caad936e85c9188cc7a1477b61ea59633f35c949 (diff) | |
download | libapr-eb85744ef4a3674f479bad5d2ef44fd1d6c85d33.tar.gz |
Use AI_ADDRCONFIG flag by default, where available.
* sockaddr.c (call_resolver): For lookups of AF_UNSPEC addresses, set
the AI_ADDRCONFIG flag; retry without the flag if getaddrinfo returns
EAI_BADFLAGS.
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@64571 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'network_io')
-rw-r--r-- | network_io/unix/sockaddr.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/network_io/unix/sockaddr.c b/network_io/unix/sockaddr.c index ef0ec1010..c53ab48b1 100644 --- a/network_io/unix/sockaddr.c +++ b/network_io/unix/sockaddr.c @@ -373,7 +373,22 @@ static apr_status_t call_resolver(apr_sockaddr_t **sa, memset(&hints, 0, sizeof(hints)); hints.ai_family = family; hints.ai_socktype = SOCK_STREAM; +#ifdef AI_ADDRCONFIG + if (family == AF_UNSPEC) { + /* By default, only look up addresses using address types for + * which a local interface is configured, i.e. no IPv6 if no + * IPv6 interfaces configured. */ + hints.ai_flags = AI_ADDRCONFIG; + } +#endif error = getaddrinfo(hostname, NULL, &hints, &ai_list); +#ifdef AI_ADDRCONFIG + if (error == EAI_BADFLAGS && family == AF_UNSPEC) { + /* Retry with no flags if AI_ADDRCONFIG was rejected. */ + hints.ai_flags = 0; + error = getaddrinfo(hostname, NULL, &hints, &ai_list); + } +#endif if (error) { #ifndef WIN32 if (error == EAI_SYSTEM) { |