FSocket創建創建的相關代碼
FScopeLock ScopeLock(m_MsgHandlerStartLock); //線程鎖
if (m_Connect)
return true;
ISocketSubsystem* g_socketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);
if (g_socketSubsystem == NULL)
return 1;
m_Socket = g_socketSubsystem->CreateSocket(NAME_Stream, TEXT("remote game server connection")); //創建連接
if (m_Socket == NULL)
return 2;
//FSocketBSD* SocketBSD = Cast<FSocketBSD>(m_Socket);
//if (SocketBSD) {
m_Socket->SetNagle(false); //Nagle算法
//}
bool IpIsValid = false;
TSharedRef<FInternetAddr> ServerAddress = g_socketSubsystem->CreateInternetAddr();
ServerAddress->SetIp(*m_LogicServerIp, IpIsValid);
ServerAddress->SetPort(m_LogicServerPort);
clock_t start, ends;
start = clock();
UE_LOG(LogMemory, Log, TEXT("mf TcpClientUE::Run start %ld"), start);
bool bIsValid = m_Socket->Connect(*ServerAddress);
ends = clock();
UE_LOG(LogMemory, Log, TEXT("mf TcpClientUE::Run end %ld bIsValid=%d"), (ends - start) , bIsValid);
//FString TempString = FString::Printf(TEXT("Connect ServerAddress : %s %d %d %d"),
// *m_LogicServerIp,
// m_LogicServerPort,
// bIsValid,
// m_FirstConnect); //輸出信息
//GEngine->AddOnScreenDebugMessage(-1, 10.f, FColor::Red, TempString);
if (bIsValid) {
m_Connect = true;
if (m_FirstConnect) {
ReceiverUE::GetInstance().Start();
SenderUE::GetInstance().Start();
}
m_FirstConnect = false;
//UWorldClient::GetInstance().NotifyNetStateChangeEvent(1);
}
else {
m_Connect = false;
UWorldClient::GetInstance().SetNetError(faith::e_logout_result_net_lost);
}
ULoginClient::GetInstance().m_SendMsgError = "";
return (bIsValid ? 0 : 3);