This commit is contained in:
yuanyuanxiang
2025-10-26 18:57:45 +08:00
parent 8ed23cc8dc
commit 2855af1932
5 changed files with 27 additions and 3 deletions

View File

@@ -373,6 +373,7 @@ bool IOCPClient::ProcessRecvData(CBuffer *m_CompressedBuffer, char *szBuffer, in
int iReceivedLength = ReceiveData(szBuffer, len, flag); int iReceivedLength = ReceiveData(szBuffer, len, flag);
if (iReceivedLength <= 0) { if (iReceivedLength <= 0) {
int a = WSAGetLastError(); int a = WSAGetLastError();
Mprintf("[recv] return %d, GetLastError= %d. \n", iReceivedLength, a);
Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Disconnect(); //<2F><><EFBFBD>մ<EFBFBD><D5B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_CompressedBuffer->ClearBuffer(); m_CompressedBuffer->ClearBuffer();
if (m_exit_while_disconnect) if (m_exit_while_disconnect)

View File

@@ -262,7 +262,7 @@ VOID CScreenManager::SendBitMapInfo()
//<2F><><EFBFBD>ォbmpλͼ<CEBB><EFBFBD><E1B9B9><EFBFBD>ͳ<EFBFBD>ȥ //<2F><><EFBFBD>ォbmpλͼ<CEBB><EFBFBD><E1B9B9><EFBFBD>ͳ<EFBFBD>ȥ
memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1); memcpy(szBuffer + 1, m_ScreenSpyObject->GetBIData(), ulLength - 1);
HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader()); HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader());
m_ClientObject->Send2Server((char*)szBuffer, ulLength, &mask); m_ClientObject->Send2Server((char*)szBuffer, ulLength, 0);
VirtualFree(szBuffer, 0, MEM_RELEASE); VirtualFree(szBuffer, 0, MEM_RELEASE);
} }

View File

@@ -87,6 +87,23 @@ public:
} }
}; };
class CAutoCLock
{
private:
CLock& m_cs;
public:
CAutoCLock(CLock& cs) : m_cs(cs)
{
m_cs.Lock();
}
~CAutoCLock()
{
m_cs.Unlock();
}
};
// 智能计时器,计算函数的耗时 // 智能计时器,计算函数的耗时
class auto_tick class auto_tick
{ {

View File

@@ -593,6 +593,7 @@ BOOL IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompletedLength) BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompletedLength)
{ {
CAutoCLock L(ContextObject->SendLock);
try { try {
DWORD ulFlags = MSG_PARTIAL; DWORD ulFlags = MSG_PARTIAL;
@@ -609,10 +610,12 @@ BOOL IOCPServer::OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompl
NULL, ulFlags,&OverlappedPlus->m_ol, NULL); NULL, ulFlags,&OverlappedPlus->m_ol, NULL);
if ( iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING ) { if ( iOk == SOCKET_ERROR && WSAGetLastError() != WSA_IO_PENDING ) {
int a = GetLastError(); int a = GetLastError();
Mprintf("!!! OnClientPostSending Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>\n"); Mprintf("!!! OnClientPostSending Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣʧ<CFA2><CAA7>: %d\n", a);
RemoveStaleContext(ContextObject); RemoveStaleContext(ContextObject);
SAFE_DELETE(OverlappedPlus); SAFE_DELETE(OverlappedPlus);
return FALSE;
} }
return TRUE;
} }
} catch(...) { } catch(...) {
Mprintf("[ERROR] OnClientPostSending catch an error \n"); Mprintf("[ERROR] OnClientPostSending catch an error \n");

View File

@@ -374,6 +374,7 @@ public:
Server* server; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Server* server; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ikcpcb* kcp = nullptr; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>KCP<43> ikcpcb* kcp = nullptr; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>KCP<43>
std::string GroupName; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> std::string GroupName; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CLock SendLock; // fix #214
std::string GetProtocol() const override std::string GetProtocol() const override
{ {
@@ -411,8 +412,10 @@ public:
} }
BOOL Send2Client(PBYTE szBuffer, ULONG ulOriginalLength) override BOOL Send2Client(PBYTE szBuffer, ULONG ulOriginalLength) override
{ {
if (server) if (server) {
CAutoCLock L(SendLock);
return server->Send2Client(this, szBuffer, ulOriginalLength); return server->Send2Client(this, szBuffer, ulOriginalLength);
}
return FALSE; return FALSE;
} }
VOID SetClientInfo(const CString(&s)[ONLINELIST_MAX], const std::vector<std::string>& a = {}) VOID SetClientInfo(const CString(&s)[ONLINELIST_MAX], const std::vector<std::string>& a = {})