|
@@ -359,10 +359,11 @@ static void inet_save_addr(int domain, struct addr_inet* addr, const struct sock
|
|
|
if (saddr->sa_family == AF_INET) {
|
|
|
const struct sockaddr_in* in = (const struct sockaddr_in*)saddr;
|
|
|
addr->port = __ntohs(in->sin_port);
|
|
|
- ((uint32_t*)&addr->addr.v6.s6_addr)[0] = 0;
|
|
|
- ((uint32_t*)&addr->addr.v6.s6_addr)[1] = 0;
|
|
|
- ((uint32_t*)&addr->addr.v6.s6_addr)[2] = 0xffff0000;
|
|
|
- ((uint32_t*)&addr->addr.v6.s6_addr)[3] = in->sin_addr.s_addr;
|
|
|
+ uint32_t s_addr[4] = {
|
|
|
+ /* in->sin_addr.s_addr is already network byte order */
|
|
|
+ __htonl(0), __htonl(0), __htonl(0x0000ffff), in->sin_addr.s_addr
|
|
|
+ };
|
|
|
+ memcpy(&addr->addr.v6.s6_addr, s_addr, sizeof(s_addr));
|
|
|
} else {
|
|
|
const struct sockaddr_in6* in6 = (const struct sockaddr_in6*)saddr;
|
|
|
addr->port = __ntohs(in6->sin6_port);
|