bool CClientReConnectManager::ConnectUDP(int nServerID, const char* pIP, int nPort, uint8 u1IPType, IClientUDPMessage* pClientUDPMessage) { ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_ThreadWritrLock); mapReactorUDPConnectInfo::iterator f = m_mapReactorUDPConnectInfo.find(nServerID); if (f != m_mapReactorUDPConnectInfo.end()) { //如果这个链接已经存在,则不创建新的链接 OUR_DEBUG((LM_ERROR, "[CClientReConnectManager::ConnectUDP]nServerID =(%d) is exist.\n", nServerID)); return false; } CReactorUDPClient* pReactorUDPClient = new CReactorUDPClient(); if (NULL == pReactorUDPClient) { OUR_DEBUG((LM_ERROR, "[CClientReConnectManager::ConnectUDP]nServerID =(%d) pProactorUDPClient is NULL.\n", nServerID)); return false; } m_mapReactorUDPConnectInfo[nServerID] = pReactorUDPClient; ACE_INET_Addr AddrLocal; int nErr = 0; if (u1IPType == TYPE_IPV4) { nErr = AddrLocal.set(nPort, pIP); } else { nErr = AddrLocal.set(nPort, pIP, 1, PF_INET6); } if (nErr != 0) { OUR_DEBUG((LM_INFO, "[CClientReConnectManager::ConnectUDP](%d)UDP set_address error[%d].\n", nServerID, errno)); SAFE_DELETE(pReactorUDPClient); return false; } if (0 != pReactorUDPClient->OpenAddress(AddrLocal, App_ReactorManager::instance()->GetAce_Reactor(REACTOR_UDPDEFINE), pClientUDPMessage)) { OUR_DEBUG((LM_INFO, "[CClientReConnectManager::ConnectUDP](%d)UDP OpenAddress error.\n", nServerID)); SAFE_DELETE(pReactorUDPClient); return false; } return true; }
bool CClientReConnectManager::ConnectUDP(int nServerID, const char* pIP, int nPort, uint8 u1IPType, EM_UDP_TYPE emType, IClientUDPMessage* pClientUDPMessage) { ACE_Guard<ACE_Recursive_Thread_Mutex> guard(m_ThreadWritrLock); CReactorUDPClient* pReactorUDPClient = NULL; //初始化连接动作 if (false == ConnectUdpInit(nServerID, pReactorUDPClient)) { return false; } //初始化连接地址 ACE_INET_Addr AddrLocal; int nErr = 0; if (emType != UDP_BROADCAST) { if (u1IPType == TYPE_IPV4) { nErr = AddrLocal.set(nPort, pIP); } else { nErr = AddrLocal.set(nPort, pIP, 1, PF_INET6); } } else { //如果是UDP广播 AddrLocal.set(nPort, (uint32)INADDR_ANY); } if (nErr != 0) { OUR_DEBUG((LM_INFO, "[CClientReConnectManager::ConnectUDP](%d)UDP set_address error[%d].\n", nServerID, errno)); SAFE_DELETE(pReactorUDPClient); return false; } //开始连接 if (0 != pReactorUDPClient->OpenAddress(AddrLocal, emType, App_ReactorManager::instance()->GetAce_Reactor(REACTOR_UDPDEFINE), pClientUDPMessage)) { OUR_DEBUG((LM_INFO, "[CClientReConnectManager::ConnectUDP](%d)UDP OpenAddress error.\n", nServerID)); SAFE_DELETE(pReactorUDPClient); return false; } return true; }