From 62154cf07bc2c7741a440b08098b7d1375441554 Mon Sep 17 00:00:00 2001 From: AmazingDM Date: Fri, 15 Oct 2021 01:11:58 +0800 Subject: [PATCH] [Redirector] Fix UDP Run Thread --- Redirector/SocksHelper.cpp | 24 ++++++++++++------------ Redirector/SocksHelper.h | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Redirector/SocksHelper.cpp b/Redirector/SocksHelper.cpp index 68b24613..de82c8c0 100644 --- a/Redirector/SocksHelper.cpp +++ b/Redirector/SocksHelper.cpp @@ -350,7 +350,7 @@ bool SocksHelper::UDP::CreateUDP() } } - this->tcpThread = thread(&SocksHelper::UDP::Run, this); + this->tcpThread = thread(SocksHelper::UDP::Run, this->tcpSocket, this->udpSocket); this->tcpThread.detach(); return true; } @@ -445,30 +445,30 @@ int SocksHelper::UDP::Read(PSOCKADDR_IN6 target, char* buffer, int length, PTIME return bufferLength - (addr.sin6_family == AF_INET ? 10 : 22); } -void SocksHelper::UDP::Run() +void SocksHelper::UDP::Run(SOCKET tcpSocket, SOCKET udpSocket) { char buffer[1]; - while (this->tcpSocket != INVALID_SOCKET) + while (tcpSocket != INVALID_SOCKET) { - if (recv(this->tcpSocket, buffer, sizeof(buffer), 0) != sizeof(buffer)) + if (recv(tcpSocket, buffer, sizeof(buffer), 0) != sizeof(buffer)) break; - if (send(this->tcpSocket, buffer, sizeof(buffer), 0) != sizeof(buffer)) + if (send(tcpSocket, buffer, sizeof(buffer), 0) != sizeof(buffer)) break; } - if (this->tcpSocket != INVALID_SOCKET) + if (tcpSocket != INVALID_SOCKET) { - closesocket(this->tcpSocket); + closesocket(tcpSocket); - this->tcpSocket = INVALID_SOCKET; + tcpSocket = INVALID_SOCKET; } - if (this->udpSocket != INVALID_SOCKET) + if (udpSocket != INVALID_SOCKET) { - closesocket(this->udpSocket); + closesocket(udpSocket); - this->udpSocket = INVALID_SOCKET; + udpSocket = INVALID_SOCKET; } -} +} \ No newline at end of file diff --git a/Redirector/SocksHelper.h b/Redirector/SocksHelper.h index 4e19a3d3..5f151718 100644 --- a/Redirector/SocksHelper.h +++ b/Redirector/SocksHelper.h @@ -39,7 +39,7 @@ namespace SocksHelper SOCKET tcpSocket = INVALID_SOCKET; SOCKET udpSocket = INVALID_SOCKET; private: - void Run(); + static void Run(SOCKET tcpSocket, SOCKET udpSocket); SOCKADDR_IN6 address = { 0 }; thread tcpThread;