diff options
author | Luo Jinghua <sunmoon1997@gmail.com> | 2016-06-07 18:11:37 +0800 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2016-06-07 20:39:05 +0200 |
commit | 01a49a7626ee4a226cd0b50d70591ab147d60ee0 (patch) | |
tree | ef54a49ff290e8c432570d6dc081ebb6c56f420d /lib/curl_addrinfo.c | |
parent | 9b6d3a662ea81ec3bbb12002ca79fd27d750671e (diff) | |
download | curl-01a49a7626ee4a226cd0b50d70591ab147d60ee0.tar.gz |
resolve: add support for IPv6 DNS64/NAT64 Networks on OS X + iOS
Use getaddrinfo() to resolve the IPv4 address literal on iOS/Mac OS X.
If the current network interface doesn’t support IPv4, but supports
IPv6, NAT64, and DNS64.
Closes #866
Fixes #863
Diffstat (limited to 'lib/curl_addrinfo.c')
-rw-r--r-- | lib/curl_addrinfo.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/curl_addrinfo.c b/lib/curl_addrinfo.c index 8fa0c84cc..35eb2ddb9 100644 --- a/lib/curl_addrinfo.c +++ b/lib/curl_addrinfo.c @@ -563,3 +563,32 @@ curl_dogetaddrinfo(const char *hostname, } #endif /* defined(CURLDEBUG) && defined(HAVE_GETADDRINFO) */ +#if defined(HAVE_GETADDRINFO) && defined(USE_RESOLVE_ON_IPS) +/* + * Work-arounds the sin6_port is always zero bug on iOS 9.3.2 and Mac OS X + * 10.11.5. + */ +void Curl_addrinfo_set_port(Curl_addrinfo *addrinfo, int port) +{ + Curl_addrinfo *ca; + struct sockaddr_in *addr; +#ifdef ENABLE_IPV6 + struct sockaddr_in6 *addr6; +#endif + for(ca = addrinfo; ca != NULL; ca = ca->ai_next) { + switch (ca->ai_family) { + case AF_INET: + addr = (void *)ca->ai_addr; /* storage area for this info */ + addr->sin_port = htons((unsigned short)port); + break; + +#ifdef ENABLE_IPV6 + case AF_INET6: + addr6 = (void *)ca->ai_addr; /* storage area for this info */ + addr6->sin6_port = htons((unsigned short)port); + break; +#endif + } + } +} +#endif |