Network/Windows: Fix build on some plateforms (Hi MinGW)
Former-commit-id: d8bab0668373c3e8f6f15296e7d19d4547559fce [formerly 46afd404ab3cf4bfd8e1981cc20574707dbf703c] Former-commit-id: 29c558c519e2783641b87747de4215cd9652e1b2
This commit is contained in:
parent
ba10e0a029
commit
d26395ba6d
|
|
@ -84,16 +84,21 @@ namespace Nz
|
|||
{
|
||||
sockaddr_in* ipv4 = reinterpret_cast<sockaddr_in*>(info->ai_addr);
|
||||
|
||||
auto& rawIpV4 = ipv4->sin_addr.S_un.S_un_b;
|
||||
return IpAddress(rawIpV4.s_b1, rawIpV4.s_b2, rawIpV4.s_b3, rawIpV4.s_b4, ntohs(ipv4->sin_port));
|
||||
auto& rawIpV4 = ipv4->sin_addr;
|
||||
return IpAddress(rawIpV4.s_net, rawIpV4.s_host, rawIpV4.s_lh, rawIpV4.s_impno, ntohs(ipv4->sin_port));
|
||||
}
|
||||
|
||||
case AF_INET6:
|
||||
{
|
||||
sockaddr_in6* ipv6 = reinterpret_cast<sockaddr_in6*>(info->ai_addr);
|
||||
|
||||
auto& rawIpV6 = ipv6->sin6_addr.u.Word;
|
||||
return IpAddress(rawIpV6[0], rawIpV6[1], rawIpV6[2], rawIpV6[3], rawIpV6[4], rawIpV6[5], rawIpV6[6], rawIpV6[7], ntohs(ipv6->sin6_port));
|
||||
auto& rawIpV6 = ipv6->sin6_addr.s6_addr;
|
||||
|
||||
IpAddress::IPv6 structIpV6;
|
||||
for (unsigned int i = 0; i < 8; ++i)
|
||||
structIpV6[i] = UInt16(rawIpV6[i * 2]) << 8 | UInt16(rawIpV6[i * 2 + 1]);
|
||||
|
||||
return IpAddress(structIpV6, ntohs(ipv6->sin6_port));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -146,8 +151,13 @@ namespace Nz
|
|||
|
||||
IpAddress IpAddressImpl::FromSockAddr(const sockaddr_in6* addressv6)
|
||||
{
|
||||
auto& rawIpV6 = addressv6->sin6_addr.u.Word;
|
||||
return IpAddress(rawIpV6[0], rawIpV6[1], rawIpV6[2], rawIpV6[3], rawIpV6[4], rawIpV6[5], rawIpV6[6], rawIpV6[7], ntohs(addressv6->sin6_port));
|
||||
auto& rawIpV6 = addressv6->sin6_addr.s6_addr;
|
||||
|
||||
IpAddress::IPv6 ipv6;
|
||||
for (unsigned int i = 0; i < 8; ++i)
|
||||
ipv6[i] = rawIpV6[i*2] << 8 | rawIpV6[i*2+1];
|
||||
|
||||
return IpAddress(ipv6, ntohs(addressv6->sin6_port));
|
||||
}
|
||||
|
||||
bool IpAddressImpl::ResolveAddress(const IpAddress& ipAddress, String* hostname, String* service, ResolveError* error)
|
||||
|
|
@ -223,7 +233,7 @@ namespace Nz
|
|||
std::memset(socketAddress, 0, sizeof(sockaddr_in));
|
||||
socketAddress->sin_family = AF_INET;
|
||||
socketAddress->sin_port = htons(ipAddress.GetPort());
|
||||
socketAddress->sin_addr.S_un.S_addr = htonl(ipAddress.ToUInt32());
|
||||
socketAddress->sin_addr.s_addr = htonl(ipAddress.ToUInt32());
|
||||
|
||||
return sizeof(sockaddr_in);
|
||||
}
|
||||
|
|
@ -238,7 +248,10 @@ namespace Nz
|
|||
|
||||
IpAddress::IPv6 address = ipAddress.ToIPv6();
|
||||
for (unsigned int i = 0; i < 8; ++i)
|
||||
socketAddress->sin6_addr.u.Word[i] = htons(address[i]);
|
||||
{
|
||||
socketAddress->sin6_addr.s6_addr[i * 2 + 0] = htons(address[i]) >> 8;
|
||||
socketAddress->sin6_addr.s6_addr[i * 2 + 1] = htons(address[i]) >> 0;
|
||||
}
|
||||
|
||||
return sizeof(sockaddr_in6);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue