Files
UnrealEngineUWP/Engine/Source/Runtime/Sockets/Private/IPAddress.cpp
Ben Marsh 20bf0eb6a1 Updating copyright notices to 2017 (copying from //Tasks/UE4/Dev-Copyright-2017).
#rb none
#lockdown Nick.Penwarden

[CL 3226823 by Ben Marsh in Main branch]
2016-12-08 08:52:44 -05:00

63 lines
1.4 KiB
C++

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "IPAddress.h"
#include "SocketSubsystem.h"
/**
* Sets the address to return to the caller
*
* @param InAddr the address that is being cached
*/
FResolveInfoCached::FResolveInfoCached(const FInternetAddr& InAddr)
{
// @todo sockets: This should use Clone
uint32 IpAddr;
InAddr.GetIp(IpAddr);
Addr = ISocketSubsystem::Get()->CreateInternetAddr(IpAddr, InAddr.GetPort());
}
/**
* Copies the host name for async resolution
*
* @param InHostName the host name to resolve
*/
FResolveInfoAsync::FResolveInfoAsync(const ANSICHAR* InHostName) :
ErrorCode(SE_NO_ERROR),
bShouldAbandon(false),
AsyncTask(this)
{
FCStringAnsi::Strncpy(HostName,InHostName,256);
}
/**
* Resolves the specified host name
*/
void FResolveInfoAsync::DoWork()
{
int32 AttemptCount = 0;
ISocketSubsystem* SocketSubsystem = ISocketSubsystem::Get();
Addr = SocketSubsystem->CreateInternetAddr(0,0);
// Make up to 3 attempts to resolve it
do
{
ErrorCode = SocketSubsystem->GetHostByName(HostName, *Addr);
if (ErrorCode != SE_NO_ERROR)
{
if (ErrorCode == SE_HOST_NOT_FOUND || ErrorCode == SE_NO_DATA || ErrorCode == SE_ETIMEDOUT)
{
// Force a failure
AttemptCount = 3;
}
}
AttemptCount++;
}
while (ErrorCode != SE_NO_ERROR && AttemptCount < 3 && bShouldAbandon == false);
if (ErrorCode == SE_NO_ERROR)
{
// Cache for reuse
SocketSubsystem->AddHostNameToCache(HostName, Addr);
}
}