diff --git a/include/Network/network.h b/include/Network/network.h index 54d7f3a..bc64566 100644 --- a/include/Network/network.h +++ b/include/Network/network.h @@ -16,6 +16,7 @@ extern std::string MStatus; extern std::string UlStatus; extern std::string ListOfMods; void UDPSend(std::string Data); +int KillSocket(uint64_t Dead); void CoreNetwork(); void GameSend(std::string Data); void SendLarge(std::string Data); diff --git a/src/Network/Core.cpp b/src/Network/Core.cpp index 2a08ec8..284b6e7 100644 --- a/src/Network/Core.cpp +++ b/src/Network/Core.cpp @@ -128,7 +128,7 @@ void GameHandler(SOCKET Client){ if(Temp < 1)break; if(!isdigit(Header[Rcv]) && Header[Rcv] != '>') { error(Sec("(Core) Invalid lua communication")); - closesocket(Client); + KillSocket(Client); return; } }while(Header[Rcv++] != '>'); @@ -155,7 +155,7 @@ void GameHandler(SOCKET Client){ } else { debug(Sec("(Core) recv failed with error: ") + std::to_string(WSAGetLastError())); } - closesocket(Client); + KillSocket(Client); } void localRes(){ MStatus = " "; @@ -197,7 +197,7 @@ void CoreMain() { if (iRes == SOCKET_ERROR) { error(Sec("(Core) bind failed with error: ") + std::to_string(WSAGetLastError())); freeaddrinfo(res); - closesocket(LSocket); + KillSocket(LSocket); WSACleanup(); return; } @@ -205,7 +205,7 @@ void CoreMain() { if (iRes == SOCKET_ERROR) { debug(Sec("(Core) listen failed with error: ") + std::to_string(WSAGetLastError())); freeaddrinfo(res); - closesocket(LSocket); + KillSocket(LSocket); WSACleanup(); return; } @@ -220,7 +220,7 @@ void CoreMain() { GameHandler(CSocket); warn(Sec("Game Reconnecting...")); }while(CSocket); - closesocket(LSocket); + KillSocket(LSocket); WSACleanup(); } int Handle(EXCEPTION_POINTERS *ep){ diff --git a/src/Network/GlobalHandler.cpp b/src/Network/GlobalHandler.cpp index a410e32..939007a 100644 --- a/src/Network/GlobalHandler.cpp +++ b/src/Network/GlobalHandler.cpp @@ -18,6 +18,11 @@ extern SOCKET UDPSock; extern SOCKET TCPSock; SOCKET CSocket; +int KillSocket(uint64_t Dead){ + shutdown(Dead,SD_BOTH); + return closesocket(Dead); +} + bool CheckBytes(uint32_t Bytes){ if(Bytes == 0){ debug(Sec("(Proxy) Connection closing")); @@ -72,15 +77,20 @@ void ServerSend(std::string Data, bool Rel){ //debug("(Game->Launcher) : " + Data); } } + void NetReset(){ TCPTerminate = false; GConnected = false; Terminate = false; UlStatus = Sec("Ulstart"); MStatus = " "; - if(UDPSock != SOCKET_ERROR)closesocket(UDPSock); + if(UDPSock != SOCKET_ERROR){ + KillSocket(UDPSock); + } UDPSock = -1; - if(TCPSock != SOCKET_ERROR)closesocket(TCPSock); + if(TCPSock != SOCKET_ERROR){ + KillSocket(TCPSock); + } TCPSock = -1; ClearAll(); } @@ -117,7 +127,7 @@ SOCKET SetupListener(){ if (iRes == SOCKET_ERROR) { error(Sec("(Proxy) bind failed with error: ") + std::to_string(WSAGetLastError())); freeaddrinfo(result); - closesocket(LSocket); + KillSocket(LSocket); WSACleanup(); return -1; } @@ -125,7 +135,7 @@ SOCKET SetupListener(){ iRes = listen(LSocket, SOMAXCONN); if (iRes == SOCKET_ERROR) { error(Sec("(Proxy) listen failed with error: ") + std::to_string(WSAGetLastError())); - closesocket(LSocket); + KillSocket(LSocket); WSACleanup(); return -1; } @@ -236,5 +246,5 @@ void TCPGameServer(const std::string& IP, int Port){ if(LSocket == -1){ UlStatus = Sec("Critical error! check the launcher logs"); } - if(CSocket != SOCKET_ERROR)closesocket(CSocket); + if(CSocket != SOCKET_ERROR)KillSocket(CSocket); } \ No newline at end of file diff --git a/src/Network/Resources.cpp b/src/Network/Resources.cpp index 209430f..66247bf 100644 --- a/src/Network/Resources.cpp +++ b/src/Network/Resources.cpp @@ -47,7 +47,7 @@ void STCPSendRaw(SOCKET socket,const std::vector& Data){ } else if (BytesSent < 0) { debug(Sec("(TCP) send failed with error: ") + std::to_string(WSAGetLastError())); - closesocket(socket); + KillSocket(socket); Terminate = true; return; } @@ -67,7 +67,7 @@ std::pair STCPRecv(SOCKET socket){ return std::make_pair((char*)"",0); }else if (BytesRcv < 0) { info(Sec("(TCP) recv failed with error: ") + std::to_string(WSAGetLastError())); - closesocket(socket); + KillSocket(socket); Terminate = true; return std::make_pair((char*)"",0); } @@ -115,7 +115,7 @@ void Check(Hold* S){ std::this_thread::sleep_for(std::chrono::seconds(5)); if(S != nullptr){ if(!S->Done && S->TCPSock != -1){ - closesocket(S->TCPSock); + KillSocket(S->TCPSock); } } } diff --git a/src/Network/VehicleData.cpp b/src/Network/VehicleData.cpp index 9ec618e..71b8867 100644 --- a/src/Network/VehicleData.cpp +++ b/src/Network/VehicleData.cpp @@ -218,6 +218,6 @@ void UDPClientMain(const std::string& IP,int Port){ TCPSend(Sec("P")); UDPSend(Sec("p")); while(!Terminate)UDPRcv(); - closesocket(UDPSock); + KillSocket(UDPSock); WSACleanup(); } \ No newline at end of file diff --git a/src/Network/VehicleEvent.cpp b/src/Network/VehicleEvent.cpp index 6ba0e0d..66c9b1c 100644 --- a/src/Network/VehicleEvent.cpp +++ b/src/Network/VehicleEvent.cpp @@ -20,7 +20,7 @@ bool CheckBytes(int32_t Bytes){ return false; }else if (Bytes < 0) { debug(Sec("(TCP) recv failed with error: ") + std::to_string(WSAGetLastError())); - closesocket(TCPSock); + KillSocket(TCPSock); Terminate = true; return false; } @@ -107,7 +107,7 @@ void TCPClientMain(const std::string& IP,int Port){ if(RetCode != 0){ UlStatus = Sec("UlConnection Failed!"); std::cout << Sec("Client: connect failed! Error code: ") << WSAGetLastError() << std::endl; - closesocket(TCPSock); + KillSocket(TCPSock); WSACleanup(); Terminate = true; return; @@ -118,7 +118,7 @@ void TCPClientMain(const std::string& IP,int Port){ while(!Terminate)TCPRcv(); GameSend(Sec("T")); ////Game Send Terminate - if(closesocket(TCPSock) != 0) + if(KillSocket(TCPSock) != 0) debug(Sec("(TCP) Cannot close socket. Error code: ") + std::to_string(WSAGetLastError())); if(WSACleanup() != 0)