diff --git a/lib/client-handshake.c b/lib/client-handshake.c
index 2fec991c..061a4f97 100644
--- a/lib/client-handshake.c
+++ b/lib/client-handshake.c
@@ -72,9 +72,10 @@ struct libwebsocket *libwebsocket_client_connect_2(
 			/* map IPv4 to IPv6 */
 			bzero((char *)&server_addr6.sin6_addr,
 						sizeof(struct in6_addr));
-			server_addr6.sin6_addr.s6_addr16[5] = 0xffff;
-			bcopy(&((struct sockaddr_in *)result->ai_addr)->sin_addr,
-				&server_addr6.sin6_addr.s6_addr16[6],
+			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;
 		case AF_INET6:
diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c
index 520aa6b8..c27ebb2b 100644
--- a/lib/libwebsockets.c
+++ b/lib/libwebsockets.c
@@ -2956,10 +2956,10 @@ interface_to_sa(struct libwebsocket_context *context,
 				/* map IPv4 to IPv6 */
 				bzero((char *)&addr6->sin6_addr,
 						sizeof(struct in6_addr));
-				addr6->sin6_addr.s6_addr16[5] = 0xffff;
-				bcopy(&((struct sockaddr_in *)ifc->ifa_addr)->
-								sin_addr,
-					&addr6->sin6_addr.s6_addr16[6],
+				addr6->sin6_addr.s6_addr[10] = 0xff;
+				addr6->sin6_addr.s6_addr[11] = 0xff;
+				memcpy(&addr6->sin6_addr.s6_addr[12],
+					&((struct sockaddr_in *)ifc->ifa_addr)->sin_addr,
 							sizeof(struct in_addr));
 			} else
 #endif