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);
|
sockaddr_in* ipv4 = reinterpret_cast<sockaddr_in*>(info->ai_addr);
|
||||||
|
|
||||||
auto& rawIpV4 = ipv4->sin_addr.S_un.S_un_b;
|
auto& rawIpV4 = ipv4->sin_addr;
|
||||||
return IpAddress(rawIpV4.s_b1, rawIpV4.s_b2, rawIpV4.s_b3, rawIpV4.s_b4, ntohs(ipv4->sin_port));
|
return IpAddress(rawIpV4.s_net, rawIpV4.s_host, rawIpV4.s_lh, rawIpV4.s_impno, ntohs(ipv4->sin_port));
|
||||||
}
|
}
|
||||||
|
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
{
|
{
|
||||||
sockaddr_in6* ipv6 = reinterpret_cast<sockaddr_in6*>(info->ai_addr);
|
sockaddr_in6* ipv6 = reinterpret_cast<sockaddr_in6*>(info->ai_addr);
|
||||||
|
|
||||||
auto& rawIpV6 = ipv6->sin6_addr.u.Word;
|
auto& rawIpV6 = ipv6->sin6_addr.s6_addr;
|
||||||
return IpAddress(rawIpV6[0], rawIpV6[1], rawIpV6[2], rawIpV6[3], rawIpV6[4], rawIpV6[5], rawIpV6[6], rawIpV6[7], ntohs(ipv6->sin6_port));
|
|
||||||
|
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)
|
IpAddress IpAddressImpl::FromSockAddr(const sockaddr_in6* addressv6)
|
||||||
{
|
{
|
||||||
auto& rawIpV6 = addressv6->sin6_addr.u.Word;
|
auto& rawIpV6 = addressv6->sin6_addr.s6_addr;
|
||||||
return IpAddress(rawIpV6[0], rawIpV6[1], rawIpV6[2], rawIpV6[3], rawIpV6[4], rawIpV6[5], rawIpV6[6], rawIpV6[7], ntohs(addressv6->sin6_port));
|
|
||||||
|
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)
|
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));
|
std::memset(socketAddress, 0, sizeof(sockaddr_in));
|
||||||
socketAddress->sin_family = AF_INET;
|
socketAddress->sin_family = AF_INET;
|
||||||
socketAddress->sin_port = htons(ipAddress.GetPort());
|
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);
|
return sizeof(sockaddr_in);
|
||||||
}
|
}
|
||||||
|
|
@ -238,7 +248,10 @@ namespace Nz
|
||||||
|
|
||||||
IpAddress::IPv6 address = ipAddress.ToIPv6();
|
IpAddress::IPv6 address = ipAddress.ToIPv6();
|
||||||
for (unsigned int i = 0; i < 8; ++i)
|
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);
|
return sizeof(sockaddr_in6);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue