bool ConnectorManager_Client::ConnectToServer(const char* ip, uint16_t port, ConnectorID_t &ConnectorID) { int ret = 0; int step = 0; bool bRemove = false; Connector *pConnector = m_pConnectorPool->NewConnector(); if (pConnector == NULL) return false; Socket* pSocket = pConnector->GetSocket(); _NET_TRY { ret = pSocket->create_socket(); if(!ret) { step = 1; goto EXCEPTION; } ret = pSocket->connect_socket(ip, port); if(!ret) { step = 2; goto EXCEPTION; } ret = pSocket->setNonBlocking(); if(!ret) { step = 3; goto EXCEPTION; } ret = pSocket->setLinger(0); if(!ret) { step = 4; goto EXCEPTION; } ret = AddConnector(pConnector); if(!ret) { step = 6; goto EXCEPTION; } bRemove = true; NET::ConnecterState(pConnector->GetConnectorID(), NET::ConnecterConnect); } _NET_CATCH { step = 5; goto EXCEPTION; } WriteLog(KERN_INFO "ServerConnectorManager::ConnectToServer(): Success ! IP:%s Port:%d", ip, port ); ConnectorID = pConnector->GetConnectorID(); return true; EXCEPTION: WriteLog(KERN_ERR "ClientConnectorManager::ConnectToServer(): Fail ! IP:%s Port:%d,Step:%d", ip, port, step ); if( bRemove ) { RemoveConnector(pConnector); } else { m_pConnectorPool->DelConnector(pConnector->GetConnectorID()); } return false; }
Connector* ConnectorManager_Client::AcceptNewConnection() { if(m_bServerMode == false) return NULL; int32_t step = 0; bool ret = false; bool bRemove = false; Connector* pConnector = NULL; _NET_TRY { pConnector = m_pConnectorPool->NewConnector(); if( pConnector == NULL ) { WriteLog(KERN_ERR "ConnectorManager::AcceptNewConnection(): Fail ! New Connector Fail" ); return NULL; } ret = m_pServerSocket->accept_socket(pConnector->GetSocket()); if(!ret) { m_pConnectorPool->DelConnector(pConnector->GetConnectorID()); return NULL; } } _NET_CATCH { step += 1000; goto EXCEPTION; } _NET_TRY { Socket* pSocket = pConnector->GetSocket(); if(pSocket->getFD() == INVALID_SOCKET ) { step = 2; goto EXCEPTION; } ret = pSocket->setNonBlocking(); if(!ret) { step = 3; goto EXCEPTION; } ret = pSocket->setLinger(0); if(!ret) { step = 4; goto EXCEPTION; } step = 5; ret = AddConnector(pConnector); if(!ret) { goto EXCEPTION; } bRemove = true; NET::ConnecterState(pConnector->GetConnectorID(), NET::ConnecterConnect); } _NET_CATCH { step += 10000; goto EXCEPTION; } WriteLog(KERN_INFO "ServerConnectorManager::ConnectToServer(): Success ! sock=%d,pid=%d,ip=%s", pConnector->GetSocket()->getSOCKET(), pConnector->GetConnectorID(), pConnector->GetSocket()->getIP() ); return pConnector; EXCEPTION: WriteLog(KERN_ERR "ClientConnectorManager::ConnectToServer(): Fail ! IP:%s Port:%d,Step:%d", pConnector->GetSocket()->getSOCKET(), pConnector->GetConnectorID(), pConnector->GetSocket()->getIP() ); if( pConnector != NULL ) { if( bRemove ) RemoveConnector(pConnector); else m_pConnectorPool->DelConnector(pConnector->GetConnectorID()); } return NULL; }