int main(int argc, char** argv) { int port_no = 8002; if (argc > 2) { GERROR("Invalid number of arguments\n"); GERROR("Usage: %s <port no>\n", argv[0]); } if (argc > 1) { port_no = std::atoi(argv[1]); } ACE_INET_Addr port_to_listen (port_no); Gadgetron::CloudBusRelayAcceptor acceptor; acceptor.reactor (ACE_Reactor::instance ()); if (acceptor.open (port_to_listen) == -1) return 1; ACE_Reactor::instance()->run_reactor_event_loop (); return 0; }
// Listing 2 code/ch07 int ACE_TMAIN (int, ACE_TCHAR *[]) { ACE_INET_Addr port_to_listen ("HAStatus"); ClientAcceptor acceptor; if (acceptor.open (port_to_listen) == -1) return 1; ACE_Reactor::instance ()->run_reactor_event_loop (); return (0); }
bool TcpServerMgr::start() { // 1.启动侦听 ACE_INET_Addr port_to_listen(m_port); if (m_connector.open(port_to_listen) == -1) { return false; } else { LOG->message("server started on port:%d",port_to_listen.get_port_number()); // 启动客户端消息循环 App_CMService::instance()->start(); return true; } }
BOOL CAceTCPServer::init(int port,int RecvMaxLength,int ifUseJson){ ACE_INET_Addr port_to_listen(port); //绑定的端口 if(pacceptor->open(port_to_listen,1) == -1){ //绑定端口 AfxMessageBox("打开端口失败"); return 0; } this->ifUseJson = ifUseJson; //开一个线程用于阻塞接收 //添加一个锁,用户处理的虚函数必须要上锁,当多个客户端连接的时候,必须先处理完一个客户端的数据才能处理第二个 Threadpackage* pThreadRecvPac = new Threadpackage; pThreadRecvPac->pmutex = &mutex; pThreadRecvPac->RecvMaxLength = RecvMaxLength; pThreadRecvPac->pThis = this; pThreadRecvPac->pacceptor = pacceptor; pThreadRecvPac->pvecIPPeer = &vecIPPeer; pThreadRecvPac->ifUseJson = ifUseJson; //开线程 DWORD ThreadID = 0; Create_Thread(ThreadRecv,pThreadRecvPac,ThreadID); return 1; }
int ManageClientValidation::svc(void) { FUNCTIONTRACE(ManageClientValidation::svc); REPORT_THREAD_INFO("ManageClientValidation::svc", ACE_OS::thr_self()); ACE_Reactor * reactor = NULL; while (!m_stop) { #ifdef WIN32 reactor = new ACE_Reactor(new ACE_Select_Reactor(), true); #else reactor = new ACE_Reactor(new ACE_Dev_Poll_Reactor(), true); #endif LoginAcceptor login_acceptor; ACE_INET_Addr port_to_listen(sMsgCfg->getLSCfg().listen_port, sMsgCfg->getLSCfg().host.c_str()); if (login_acceptor.open(port_to_listen, reactor) == -1) { GATE_LOG_ERROR(ACE_TEXT("Failed to call login_acceptor.open, host is <%s>, the port is <%d>, last error is <%d>\n"), sMsgCfg->getClientCfg().host.c_str(), sMsgCfg->getClientCfg().listen_port, ACE_OS::last_error()); return 1; } ReportTrafficToLoginServer report_traffic; m_timer_id = reactor->schedule_timer(this, NULL, ACE_Time_Value(3, 0), ACE_Time_Value(3, 0)); if (m_timer_id == -1) { GATE_LOG_ERROR(ACE_TEXT("Failed to schedule timer in ManageClientValidation::svc, last error is <%d>\n"), ACE_OS::last_error()); return 1; } //m_report_traffic_timer_id = reactor->schedule_timer(&report_traffic, NULL, ACE_Time_Value(sMsgCfg->getLSCfg().report_interval), ACE_Time_Value(sMsgCfg->getLSCfg().report_interval)); //if (m_report_traffic_timer_id == -1) //{ // GATELogp(LM_ERROR, ACE_TEXT("Failed to schedule timer in ManageClientValidation::svc for report traffic, last error is <%d>\n"), ACE_OS::last_error()); // return 1; //} //reactor->run_reactor_event_loop(); while (true) { reactor->run_reactor_event_loop(); #ifdef WIN32 break; #else if (ACE_OS::last_error() == EINTR) { continue; } else { break; } #endif } GATE_LOG_INFO(ACE_TEXT("Exit thread ManageClientValidation::svc, last error is <%d>\n"), ACE_OS::last_error()); } delete reactor; m_wait = false; return 0; }