You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
182 lines
4.6 KiB
C++
182 lines
4.6 KiB
C++
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "SocketsPrivatePCH.h"
|
|
#include "SocketX.h"
|
|
#include "Sockets/SocketRaw.h"
|
|
#include "Sockets/IPAddressRaw.h"
|
|
|
|
#define ADDTOPIMPL(BasePtr) *((FInternetAddrX*)&BasePtr)->GetPimpl()
|
|
|
|
bool FSocketX::Close()
|
|
{
|
|
return Pimpl->Close();
|
|
}
|
|
|
|
bool FSocketX::Bind( const FInternetAddr& Addr )
|
|
{
|
|
return Pimpl->Bind(ADDTOPIMPL(Addr)) == 0;
|
|
}
|
|
|
|
bool FSocketX::Connect( const FInternetAddr& Addr )
|
|
{
|
|
int32 Return = Pimpl->Connect(ADDTOPIMPL(Addr));
|
|
|
|
check(SocketSubsystem);
|
|
ESocketErrors Error = SocketSubsystem->TranslateErrorCode(Return);
|
|
|
|
// "would block" is not an error
|
|
return ((Error == SE_NO_ERROR) || (Error == SE_EWOULDBLOCK));
|
|
}
|
|
|
|
bool FSocketX::Listen( int32 MaxBacklog )
|
|
{
|
|
return Pimpl->Listen(MaxBacklog);
|
|
}
|
|
|
|
bool FSocketX::HasPendingConnection( bool& bHasPendingConnection )
|
|
{
|
|
return Pimpl->HasPendingConnection(bHasPendingConnection);
|
|
}
|
|
|
|
bool FSocketX::HasPendingData( uint32& PendingDataSize )
|
|
{
|
|
return Pimpl->HasPendingData(PendingDataSize);
|
|
}
|
|
|
|
class FSocket* FSocketX::Accept( const FString& SocketDescription )
|
|
{
|
|
FSocketRaw* RawSocket = Pimpl->Accept();
|
|
return new FSocketX( RawSocket, SocketType, SocketDescription,SocketSubsystem);
|
|
}
|
|
|
|
class FSocket* FSocketX::Accept( FInternetAddr& OutAddr, const FString& SocketDescription )
|
|
{
|
|
FSocketRaw* RawSocket = Pimpl->Accept(ADDTOPIMPL(OutAddr));
|
|
return new FSocketX( RawSocket, SocketType, SocketDescription,SocketSubsystem);
|
|
}
|
|
|
|
bool FSocketX::SendTo( const uint8* Data, int32 Count, int32& BytesSent, const FInternetAddr& Destination )
|
|
{
|
|
return Pimpl->SendTo(Data,Count,(unsigned int&)BytesSent, ADDTOPIMPL(Destination));
|
|
}
|
|
|
|
bool FSocketX::Send( const uint8* Data, int32 Count, int32& BytesSent )
|
|
{
|
|
return Pimpl->Send( Data, Count, (unsigned int&)BytesSent);
|
|
}
|
|
|
|
bool FSocketX::RecvFrom( uint8* Data, int32 BufferSize, int32& BytesRead, FInternetAddr& Source, ESocketReceiveFlags::Type Flags /*= ESocketReceiveFlags::None */ )
|
|
{
|
|
return Pimpl->RecvFrom( Data, BufferSize, (unsigned int&) BytesRead, ADDTOPIMPL(Source), (int)Flags );
|
|
}
|
|
|
|
bool FSocketX::Recv( uint8* Data, int32 BufferSize, int32& BytesRead, ESocketReceiveFlags::Type Flags /*= ESocketReceiveFlags::None */ )
|
|
{
|
|
return Pimpl->Recv(Data,BufferSize,(unsigned int&)BytesRead,(int)Flags);
|
|
}
|
|
|
|
bool FSocketX::Wait( ESocketWaitConditions::Type Condition, FTimespan WaitTime )
|
|
{
|
|
if ((Condition == ESocketWaitConditions::WaitForRead) )
|
|
{
|
|
return Pimpl->WaitForRead( WaitTime.GetMilliseconds() );
|
|
}
|
|
if ( Condition == ESocketWaitConditions::WaitForWrite)
|
|
{
|
|
return Pimpl->WaitForWrite( WaitTime.GetMilliseconds() );
|
|
}
|
|
|
|
return Pimpl->WaitForReadWrite( WaitTime.GetMilliseconds() );
|
|
}
|
|
|
|
ESocketConnectionState FSocketX::GetConnectionState()
|
|
{
|
|
// @fix-me -
|
|
if ( !Pimpl->WaitForReadWrite( 1 ) )
|
|
{
|
|
return ESocketConnectionState::SCS_ConnectionError;
|
|
}
|
|
else
|
|
{
|
|
return ESocketConnectionState::SCS_Connected;
|
|
}
|
|
|
|
}
|
|
|
|
void FSocketX::GetAddress( FInternetAddr& OutAddr )
|
|
{
|
|
Pimpl->GetAddress(ADDTOPIMPL(OutAddr) );
|
|
}
|
|
|
|
bool FSocketX::GetPeerAddress( FInternetAddr& OutAddr )
|
|
{
|
|
Pimpl->GetPeerAddress(ADDTOPIMPL(OutAddr));
|
|
}
|
|
|
|
bool FSocketX::SetNonBlocking( bool bIsNonBlocking /*= true */ )
|
|
{
|
|
return Pimpl->SetNonBlocking( bIsNonBlocking );
|
|
}
|
|
|
|
bool FSocketX::SetBroadcast( bool bAllowBroadcast /*= true */ )
|
|
{
|
|
return Pimpl->SetBroadcast( bAllowBroadcast );
|
|
}
|
|
|
|
bool FSocketX::JoinMulticastGroup( const FInternetAddr& GroupAddress )
|
|
{
|
|
return Pimpl->JoinMulticastGroup( ADDTOPIMPL(GroupAddress) );
|
|
}
|
|
|
|
bool FSocketX::LeaveMulticastGroup( const FInternetAddr& GroupAddress )
|
|
{
|
|
return Pimpl->LeaveMulticastGroup( ADDTOPIMPL(GroupAddress) );
|
|
}
|
|
|
|
bool FSocketX::SetMulticastLoopback( bool bLoopback )
|
|
{
|
|
return Pimpl->SetMulticastLoopback(bLoopback);
|
|
}
|
|
|
|
bool FSocketX::SetMulticastTtl( uint8 TimeToLive )
|
|
{
|
|
return Pimpl->SetMulticastTtl( TimeToLive);
|
|
}
|
|
|
|
bool FSocketX::SetReuseAddr( bool bAllowReuse /*= true */ )
|
|
{
|
|
return Pimpl->SetReuseAddr( bAllowReuse );
|
|
}
|
|
|
|
bool FSocketX::SetLinger( bool bShouldLinger /*= true*/, int32 Timeout /*= 0 */ )
|
|
{
|
|
return Pimpl->SetLinger( bShouldLinger, Timeout);
|
|
}
|
|
|
|
bool FSocketX::SetRecvErr( bool bUseErrorQueue /*= true */ )
|
|
{
|
|
return Pimpl->SetLinger(bUseErrorQueue);
|
|
}
|
|
|
|
bool FSocketX::SetSendBufferSize( int32 Size, int32& NewSize )
|
|
{
|
|
return Pimpl->SetSendBufferSize( Size, (unsigned int&)NewSize );
|
|
}
|
|
|
|
bool FSocketX::SetReceiveBufferSize( int32 Size, int32& NewSize )
|
|
{
|
|
return Pimpl->SetReceiveBufferSize( Size, (unsigned int&)NewSize);
|
|
}
|
|
|
|
int32 FSocketX::GetPortNo()
|
|
{
|
|
bool bOK = false;
|
|
int32 PortNo = Pimpl->GetPortNo(bOK);
|
|
check ( bOK );
|
|
return PortNo;
|
|
}
|
|
|
|
bool FSocketX::IsValid()
|
|
{
|
|
return Pimpl->IsValid();
|
|
} |