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