// PD_TRACE_DECLARE_FUNCTION ( SDB__NETEVNHND_SYNCCONN, "_netEventHandler::syncConnect" ) INT32 _netEventHandler::syncConnect( const CHAR *hostName, const CHAR *serviceName ) { SDB_ASSERT( NULL != hostName, "hostName should not be NULL" ) ; SDB_ASSERT( NULL != serviceName, "serviceName should not be NULL" ) ; INT32 rc = SDB_OK ; PD_TRACE_ENTRY ( SDB__NETEVNHND_SYNCCONN ); if ( _isConnected ) { close() ; } /* try { boost::system::error_code ec ; tcp::resolver::query query ( tcp::v4(), hostName, serviceName ) ; tcp::resolver resolver ( _frame->ioservice() ) ; tcp::resolver::iterator itr = resolver.resolve ( query ) ; ip::tcp::endpoint endpoint = *itr ; _sock.open( tcp::v4()) ; _sock.connect( endpoint, ec ) ; if ( ec ) { if ( boost::asio::error::would_block == ec ) { rc = _complete( _sock.native() ) ; if ( SDB_OK != rc ) { _sock.close() ; PD_LOG ( PDWARNING, "Failed to connect to %s: %s: timeout", hostName, serviceName ) ; goto error ; } } else { PD_LOG ( PDWARNING, "Failed to connect to %s: %s: %s", hostName, serviceName, ec.message().c_str()) ; rc = SDB_NET_CANNOT_CONNECT ; _sock.close() ; goto error ; } } } catch ( boost::system::system_error &e ) { PD_LOG ( PDWARNING, "Failed to connect to %s: %s: %s", hostName, serviceName, e.what() ) ; rc = SDB_NET_CANNOT_CONNECT ; _sock.close() ; goto error ; } */ UINT16 port = 0 ; rc = ossGetPort( serviceName, port ) ; if ( SDB_OK != rc ) { PD_LOG( PDERROR, "failed to get port :%s", serviceName ) ; goto error ; } { _ossSocket sock( hostName, port ) ; rc = sock.initSocket() ; if ( SDB_OK != rc ) { PD_LOG( PDERROR, "failed to init socket:%d", rc ) ; goto error ; } sock.closeWhenDestruct( FALSE ) ; rc = sock.connect() ; if ( SDB_OK != rc ) { PD_LOG( PDERROR, "failed to connect remote[%s:%s], rc:%d", hostName, serviceName, rc ) ; goto error ; } try { _sock.assign( tcp::v4(), sock.native() ) ; } catch ( std::exception &e ) { PD_LOG( PDERROR, "unexpected err happened:%s", e.what() ) ; rc = SDB_SYS ; sock.close() ; _sock.close() ; goto error ; } } setOpt() ; done: PD_TRACE_EXITRC ( SDB__NETEVNHND_SYNCCONN, rc ); return rc ; error: goto done ; }
INT32 _pmdController::init () { INT32 rc = SDB_OK ; pmdOptionsCB *pOptCB = pmdGetOptionCB() ; UINT16 port = 0 ; UINT16 protocolPort = 0 ; port = pOptCB->getServicePort() ; _pTcpListener = SDB_OSS_NEW ossSocket( port ) ; if ( !_pTcpListener ) { PD_LOG( PDERROR, "Failed to alloc socket" ) ; rc = SDB_OOM ; goto error ; } rc = _pTcpListener->initSocket() ; PD_RC_CHECK( rc, PDERROR, "Failed to init tcp listener socket[%d], " "rc: %d", port, rc ) ; rc = _pTcpListener->bind_listen() ; PD_RC_CHECK( rc, PDERROR, "Failed to bind tcp listener socket[%d], " "rc: %d", port, rc ) ; PD_LOG( PDEVENT, "Listerning on port[%d]", port ) ; rc = ossGetPort( pOptCB->getRestService(), port ) ; PD_RC_CHECK( rc, PDERROR, "Failed to get port by service name: %s, " "rc: %d", pOptCB->getRestService(), rc ) ; _pHttpListener = SDB_OSS_NEW ossSocket( port ) ; if ( !_pHttpListener ) { PD_LOG( PDERROR, "Failed to alloc socket" ) ; rc = SDB_OOM ; goto error ; } rc = _pHttpListener->initSocket() ; PD_RC_CHECK( rc, PDERROR, "Failed to init http listener socket[%d], " "rc: %d", port, rc ) ; rc = _pHttpListener->bind_listen() ; PD_RC_CHECK( rc, PDERROR, "Failed to bind http listerner socket[%d], " "rc: %d", port, rc ) ; PD_LOG( PDEVENT, "Http Listerning on port[%d]", port ) ; if ( FALSE ) { protocolPort = ossAtoi( _protocol->getServiceName() ) ; _pMongoListener = SDB_OSS_NEW ossSocket( protocolPort ) ; if ( !_pMongoListener ) { PD_LOG( PDERROR, "Failed to alloc socket" ) ; rc = SDB_OOM ; goto error ; } rc = _pMongoListener->initSocket() ; PD_RC_CHECK( rc, PDERROR, "Failed to init FAP listener socket[%d], " "rc: %d", protocolPort, rc ) ; rc = _pMongoListener->bind_listen() ; PD_RC_CHECK( rc, PDERROR, "Failed to bind FAP listener socket[%d], " "rc: %d", protocolPort, rc ) ; PD_LOG( PDEVENT, "Listerning on port[%d]", protocolPort ) ; } done: return rc ; error: goto done ; }
INT32 _ossSocket::getPort ( const CHAR *pServiceName, UINT16 &port ) { return ossGetPort( pServiceName, port ) ; }
INT32 _pmdController::init () { INT32 rc = SDB_OK ; pmdOptionsCB *pOptCB = pmdGetOptionCB() ; UINT16 port = 0 ; CHAR fapModuleName[ FAP_MODULE_NAME_SIZE + 1 ] = { 0 } ; if ( pOptCB->hasField( FAP_OPTION_NAME ) ) { pOptCB->getFieldStr( FAP_OPTION_NAME, fapModuleName, FAP_MODULE_NAME_SIZE, "" ) ; rc = initForeignModule( fapModuleName ) ; PD_RC_CHECK( rc, PDERROR, "Failed to init fap module, rc: %d", rc ) ; } // 1. create tcp listerner port = pOptCB->getServicePort() ; // memory will be freed in fini _pTcpListener = SDB_OSS_NEW ossSocket( port ) ; if ( !_pTcpListener ) { PD_LOG( PDERROR, "Failed to alloc socket" ) ; rc = SDB_OOM ; goto error ; } rc = _pTcpListener->initSocket() ; PD_RC_CHECK( rc, PDERROR, "Failed to init tcp listener socket[%d], " "rc: %d", port, rc ) ; rc = _pTcpListener->bind_listen() ; PD_RC_CHECK( rc, PDERROR, "Failed to bind tcp listener socket[%d], " "rc: %d", port, rc ) ; PD_LOG( PDEVENT, "Listerning on port[%d]", port ) ; // 2. create http listerner rc = ossGetPort( pOptCB->getRestService(), port ) ; PD_RC_CHECK( rc, PDERROR, "Failed to get port by service name: %s, " "rc: %d", pOptCB->getRestService(), rc ) ; _pHttpListener = SDB_OSS_NEW ossSocket( port ) ; if ( !_pHttpListener ) { PD_LOG( PDERROR, "Failed to alloc socket" ) ; rc = SDB_OOM ; goto error ; } rc = _pHttpListener->initSocket() ; PD_RC_CHECK( rc, PDERROR, "Failed to init http listener socket[%d], " "rc: %d", port, rc ) ; rc = _pHttpListener->bind_listen() ; PD_RC_CHECK( rc, PDERROR, "Failed to bind http listerner socket[%d], " "rc: %d", port, rc ) ; PD_LOG( PDEVENT, "Http Listerning on port[%d]", port ) ; done: return rc ; error: if ( SDB_NETWORK == rc ) { rc = SDB_NET_CANNOT_LISTEN ; } goto done ; }