BOOL CUdpCast::Stop() { DWORD dwCurrentThreadID = ::GetCurrentThreadId(); if(!CheckStoping(dwCurrentThreadID)) return FALSE; WaitForWorkerThreadEnd(dwCurrentThreadID); if(m_ccContext.bFireOnClose) FireClose(m_ccContext.enOperation, m_ccContext.iErrorCode); if(m_evSocket != nullptr) { ::WSACloseEvent(m_evSocket); m_evSocket = nullptr; } if(m_soClient != INVALID_SOCKET) { shutdown(m_soClient, SD_SEND); closesocket(m_soClient); m_soClient = INVALID_SOCKET; } Reset(); return TRUE; }
BOOL CTcpClient::Stop() { BOOL bNeedFireClose = FALSE; EnServiceState enCurState = m_enState; DWORD dwCurrentThreadID = ::GetCurrentThreadId(); if(!CheckStoping()) return FALSE; if(enCurState == SS_STARTED && dwCurrentThreadID != m_dwWorkerID) bNeedFireClose = TRUE; WaitForWorkerThreadEnd(dwCurrentThreadID); if(bNeedFireClose) FireClose(m_dwConnID); if(m_evSocket != nullptr) { ::WSACloseEvent(m_evSocket); m_evSocket = nullptr; } if(m_soClient != INVALID_SOCKET) { shutdown(m_soClient, SD_SEND); closesocket(m_soClient); m_soClient = INVALID_SOCKET; } Reset(); return TRUE; }
BOOL CTcpServer::Stop() { if(!CheckStoping()) return FALSE; CloseListenSocket(); WaitForAcceptSocketClose(); DisconnectClientSocket(); WaitForClientSocketClose(); WaitForWorkerThreadEnd(); ReleaseClientSocket(); FireShutdown(); ReleaseFreeSocket(); ReleaseFreeBuffer(); CloseCompletePort(); Reset(); return TRUE; }
BOOL CUdpServer::Stop() { if(!CheckStoping()) return FALSE; CloseListenSocket(); ::WaitWithMessageLoop(150); WaitForDetectorThreadEnd(); DisconnectClientSocket(); WaitForClientSocketClose(); WaitForWorkerThreadEnd(); ReleaseClientSocket(); FireServerShutdown(); ReleaseFreeSocket(); ReleaseFreeBuffer(); CloseCompletePort(); Reset(); return TRUE; }
BOOL CHPThreadPool::Stop(DWORD dwMaxWait) { if(!CheckStoping()) return FALSE; ::WaitFor(15); Shutdown(dwMaxWait); Reset(); return TRUE; }
BOOL CClientSocket::Stop() { if(!CheckStoping()) return FALSE; if(m_hWorker != nullptr) { if(::GetCurrentThreadId() != m_dwWorkerID) WaitForWorkerThreadEnd(); ::CloseHandle(m_hWorker); m_hWorker = nullptr; m_dwWorkerID = 0; } if(m_evSocket != nullptr) { ::WSACloseEvent(m_evSocket); m_evSocket = nullptr; } if(m_soClient != INVALID_SOCKET) { shutdown(m_soClient, SD_SEND); closesocket(m_soClient); m_soClient = INVALID_SOCKET; } m_sndBuffers.Clear(); m_rcBuffer.Free(); m_evBuffer.Reset(); m_evStop.Reset(); m_enState = SS_STOPED; return TRUE; }
BOOL CIocpServer::Stop() { if(!CheckStoping()) return FALSE; WaitForAcceptThreadEnd(); WaitForWorkerThreadEnd(); CloseClientSocket(); CloseListenSocket(); FireServerShutdown(); ReleaseFreeSocket(); ReleaseFreeBuffer(); CloseCompletePort(); Reset(); m_enState = SS_STOPED; return TRUE; }
BOOL CTcpClient::Stop() { if(!CheckStoping()) return FALSE; SetConnected(FALSE); WaitForWorkerThreadEnd(); if(m_ccContext.bFireOnClose) FireClose(m_ccContext.enOperation, m_ccContext.iErrorCode); if(m_soClient != INVALID_SOCKET) { shutdown(m_soClient, SHUT_WR); closesocket(m_soClient); m_soClient = INVALID_SOCKET; } Reset(); return TRUE; }
BOOL CTcpAgent::Stop() { if(!CheckStoping()) return FALSE; ::WaitWithMessageLoop(150); DisconnectClientSocket(); WaitForClientSocketClose(); WaitForWorkerThreadEnd(); ReleaseClientSocket(); FireAgentShutdown(); ReleaseFreeSocket(); ReleaseFreeBuffer(); CloseCompletePort(); Reset(); return TRUE; }