Revert using AI_V4MAPPED flag to getaddrinfo for Android
Because getaddrinfo will return error on Android when
AI_V4MAPPED is specified. So we should use old implemntation.
Android support of IPv6 is very poor.
diff --git a/lib/client-handshake.c b/lib/client-handshake.c
index bfda3c0..a5316f8 100644
--- a/lib/client-handshake.c
+++ b/lib/client-handshake.c
@@ -63,8 +63,10 @@
#ifdef LWS_USE_IPV6
if (LWS_IPV6_ENABLED(context)) {
memset(&hints, 0, sizeof(struct addrinfo));
+#if !defined(__ANDROID__)
hints.ai_family = AF_INET6;
hints.ai_flags = AI_V4MAPPED;
+#endif
n = getaddrinfo(ads, NULL, &hints, &result);
if (n) {
#ifdef _WIN32
@@ -77,6 +79,18 @@
server_addr6.sin6_family = AF_INET6;
switch (result->ai_family) {
+#if defined(__ANDROID__)
+ case AF_INET:
+ /* map IPv4 to IPv6 */
+ bzero((char *)&server_addr6.sin6_addr,
+ sizeof(struct in6_addr));
+ server_addr6.sin6_addr.s6_addr[10] = 0xff;
+ server_addr6.sin6_addr.s6_addr[11] = 0xff;
+ memcpy(&server_addr6.sin6_addr.s6_addr[12],
+ &((struct sockaddr_in *)result->ai_addr)->sin_addr,
+ sizeof(struct in_addr));
+ break;
+#endif
case AF_INET6:
memcpy(&server_addr6.sin6_addr,
&((struct sockaddr_in6 *)result->ai_addr)->sin6_addr,