Beispiel #1
0
void CTcpIocpServer::Destroy(void)
{
	// 销毁SOCKET套接字
	if(INVALID_SOCKET != m_hListenSocket)
	{
		DestroySocket(m_hListenSocket);
		m_hListenSocket = INVALID_SOCKET;
	}

	//关闭检查线程
	if(INVALID_HANDLE_VALUE != m_hAcceptEvent)
	{
		WSASetEvent(m_hAcceptEvent);
	}

	//等待Context删除完成
	while ((GetTcpContextCount() > 0 || GetAcceptExCount() > 0))
	{
		//关闭所有已连接SOCKET
		CloseAllContext();

		//关闭所有未连接SOCKET
		CloseAllAcceptExSocket();

		Sleep(5);
	}

	// 销毁完成端口句柄
	if(INVALID_HANDLE_VALUE != m_hIocp)
	{
		DestroyCompletePort(m_hIocp);
		m_hIocp = INVALID_HANDLE_VALUE;
	}

	// 销毁ACCEPT事件
	if(INVALID_HANDLE_VALUE != m_hAcceptEvent)
	{
		DestroyAcceptEvent(m_hAcceptEvent);
		m_hAcceptEvent = INVALID_HANDLE_VALUE;
	}

	// 等待线程退出
	m_CheckThread.WaitThreadExit();

	// 清空缓存
	m_OverloapCache.Clear();
}
Beispiel #2
0
BOOL CNetManager::Close()
{
	StopListen();

	CloseEventThread();
	
	CloseSendDataThread();

	CConnectionMgr::GetInstancePtr()->CloseAllConnection();

	DestroyCompletePort();

	UninitNetwork();

	CConnectionMgr::GetInstancePtr()->DestroyAllConnection();

	return TRUE;
}