diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 1ad0c02..7039f8f 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -319,6 +319,8 @@ DWORD WINAPI StartClient(LPVOID lParam) bIsRun = ClientObject->IsRunning(); } while (bIsRun && ClientObject->IsConnected() && !g_bExit); + while (GetTickCount64() - dwTickCount < 5000 && !g_bExit) + Sleep(200); } cout<<"StartClient end\n"; diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index a555051..e005b1b 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -860,9 +860,14 @@ void CMy2015RemoteDlg::OnNotifyExit() //固态菜单 void CMy2015RemoteDlg::OnMainSet() { + int nMaxConnection = ((CMy2015RemoteApp*)AfxGetApp())->m_iniFile.GetInt("settings", "MaxConnection"); CSettingDlg Dlg; Dlg.DoModal(); //模态 阻塞 + if (nMaxConnection != Dlg.m_nMax_Connect) + { + m_iocpServer->UpdateMaxConnection(Dlg.m_nMax_Connect); + } } diff --git a/server/2015Remote/Buffer.h b/server/2015Remote/Buffer.h index 728a94c..b77017e 100644 --- a/server/2015Remote/Buffer.h +++ b/server/2015Remote/Buffer.h @@ -19,7 +19,7 @@ public: return buf; } ~Buffer() { - (*ref)--; + DelRef(); if (*ref == 0) { if (buf!=NULL) { @@ -48,6 +48,7 @@ public: buf = o.buf; len = o.len; ref = o.ref; + return *this; } char* c_str() const { return (char*)buf; diff --git a/server/2015Remote/IOCPServer.cpp b/server/2015Remote/IOCPServer.cpp index 4c56bea..f107744 100644 --- a/server/2015Remote/IOCPServer.cpp +++ b/server/2015Remote/IOCPServer.cpp @@ -761,6 +761,10 @@ PCONTEXT_OBJECT IOCPServer::AllocateContext() CLock cs(m_cs); + if (m_ContextConnectionList.GetCount() >= m_ulMaxConnections) { + return NULL; + } + ContextObject = !m_ContextFreePoolList.IsEmpty() ? m_ContextFreePoolList.RemoveHead() : new CONTEXT_OBJECT; if (ContextObject != NULL) @@ -807,3 +811,8 @@ VOID IOCPServer::MoveContextToFreePoolList(CONTEXT_OBJECT* ContextObject) m_ContextConnectionList.RemoveAt(Pos); //从内存结构中移除 } } + +void IOCPServer::UpdateMaxConnection(int maxConn) { + CLock cs(m_cs); + m_ulMaxConnections = maxConn; +} diff --git a/server/2015Remote/IOCPServer.h b/server/2015Remote/IOCPServer.h index b5a0630..c1cb835 100644 --- a/server/2015Remote/IOCPServer.h +++ b/server/2015Remote/IOCPServer.h @@ -104,6 +104,7 @@ public: BOOL OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans); VOID OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffer , ULONG ulOriginalLength); BOOL OnClientPostSending(CONTEXT_OBJECT* ContextObject,ULONG ulCompressedLength); + void UpdateMaxConnection(int maxConn); IOCPServer(void); ~IOCPServer(void);