ESocketErrors FSocketSubsystemBSDIPv6::GetHostByName(const ANSICHAR* HostName, FInternetAddr& OutAddr)
{
	FScopeLock ScopeLock(&HostByNameSynch);
	addrinfo* AddrInfo = NULL;

	// We are only interested in IPv6 addresses.
	addrinfo HintAddrInfo;
	FMemory::Memzero(&HintAddrInfo, sizeof(HintAddrInfo));
	HintAddrInfo.ai_family = AF_INET6;

	int32 ErrorCode = getaddrinfo(HostName, NULL, &HintAddrInfo, &AddrInfo);
	ESocketErrors SocketError = TranslateGAIErrorCode(ErrorCode);
	if (SocketError == SE_NO_ERROR)
	{
		for (; AddrInfo != nullptr; AddrInfo = AddrInfo->ai_next)
		{
			if (AddrInfo->ai_family == AF_INET6)
			{
				sockaddr_in6* IPv6SockAddr = reinterpret_cast<sockaddr_in6*>(AddrInfo->ai_addr);
				if (IPv6SockAddr != nullptr)
				{
					static_cast<FInternetAddrBSDIPv6&>(OutAddr).SetIp(IPv6SockAddr->sin6_addr);
					return SE_NO_ERROR;
				}
			}
		}
		return SE_HOST_NOT_FOUND;
	}
	return SocketError;
}
ESocketErrors FSocketSubsystemBSD::GetHostByName(const ANSICHAR* HostName, FInternetAddr& OutAddr)
{
#if PLATFORM_HAS_BSD_SOCKET_FEATURE_GETHOSTNAME
	FScopeLock ScopeLock(&HostByNameSynch);
	addrinfo* AddrInfo = nullptr;

	// Limit the IP Addresses we get back to just IPv4
	addrinfo HintAddrInfo;
	FMemory::Memzero(&HintAddrInfo, sizeof(HintAddrInfo));
	HintAddrInfo.ai_family = AF_INET;

	int32 ErrorCode = getaddrinfo(HostName, nullptr, &HintAddrInfo, &AddrInfo);
	ESocketErrors SocketError = TranslateGAIErrorCode(ErrorCode);
	if (SocketError == SE_NO_ERROR)
	{
		for (; AddrInfo != nullptr; AddrInfo = AddrInfo->ai_next)
		{
			if (AddrInfo->ai_family == AF_INET)
			{
				sockaddr_in* IPv4SockAddr = reinterpret_cast<sockaddr_in*>(AddrInfo->ai_addr);
				if (IPv4SockAddr != nullptr)
				{
					uint32 HostIP = ntohl(IPv4SockAddr->sin_addr.s_addr);
					static_cast<FInternetAddrBSD&>(OutAddr).SetIp(HostIP);
					return SE_NO_ERROR;
				}
			}
		}
		return SE_HOST_NOT_FOUND;
	}
	return SocketError;
#else
	UE_LOG(LogSockets, Error, TEXT("Platform has no getaddrinfo(), but did not override FSocketSubsystem::GetHostByName()"));
	return SE_NO_RECOVERY;
#endif
}