int WinMTRDialog::restart(const char *host_name) { int rc = 0; SetHostName(host_name); #ifdef WIN32 rc = InitMTRNet(); if ( rc == 0 ) { wmtrnet->DoTrace(traddr, max_att, pingsize, interval); } #else start = !start; if (start) { int rc = InitMTRNet(); if ( rc == 0 ) { //#ifdef linux #if 1 PingThread(this); #else _beginthread(PingThread, 0 , this); #endif } else { start = false; return rc; } } if (!start) { Sleep(1000); } #endif return rc; }
//启动网络服务器 //bMode启动模式,1:以客户端的方式启动,2:以服务器的方式启动 bool CServer::Start(BYTE bMode,CDataBlockAllocator* pDBAllocator, long nMaxFreeSockOperNum,long nMaxFreeIOOperNum,long lIOOperDataBufNum, bool bCheck,long lForbidTime, long lMaxMsgLen,long lMaxConNums,long lTotalClientsNum, long lPendingWrBufNum,long lPendingRdBufNum, long lMaxSendSizePerSecond,long lMaxRecvSizePerSecond, long lMaxBlockSendMsgNum, long lConPendingWrBufNum,long lConPendingRdBufNum, long lConMaxSendSizePerSecond,long lConMaxRecvSizePerSecond, long lConMaxBlockSendMsgNum) { m_bMode = bMode; m_pDBAllocator=pDBAllocator; m_nMaxFreeSockOperNum = nMaxFreeSockOperNum; m_nMaxFreeIOOperNum = nMaxFreeIOOperNum; m_lIOOperDataBufNum = lIOOperDataBufNum; m_bCheck = bCheck; m_lForbidTime = lForbidTime; m_lMaxMessageLength=lMaxMsgLen; m_lMaxClientConNum = lMaxConNums; m_lTotalClientsNum = lTotalClientsNum; m_lPendingWrBufNum = lPendingWrBufNum; m_lPendingRdBufNum=lPendingRdBufNum; m_lMaxSendSizePerSecond = lMaxSendSizePerSecond; m_lMaxRecvSizePerSecond = lMaxRecvSizePerSecond; m_lMaxBlockSendMsgNum = lMaxBlockSendMsgNum; m_lConPendingWrBufNum = lConPendingWrBufNum; m_lConPendingRdBufNum=lConPendingRdBufNum; m_lConMaxSendSizePerSecond= lConMaxSendSizePerSecond; m_lConMaxRecvSizePerSecond = lConMaxRecvSizePerSecond; m_lConMaxBlockSendMsgNum = lConMaxBlockSendMsgNum; //预分配命令操作结构 InitializeCriticalSection(&m_CSSockOper); InitializeCriticalSection(&m_CSMsgStat); uint i = 0; for(; i<m_nMaxFreeSockOperNum; i++) { tagSocketOper* pSockOper = new tagSocketOper(); m_FreeSocketOpers.push_back(pSockOper); } //预分配IO操作结构 InitializeCriticalSection(&m_CSIOOper); i = 0; for(; i<m_nMaxFreeIOOperNum; i++) { PER_IO_OPERATION_DATA* pPerIOData = new PER_IO_OPERATION_DATA(m_lIOOperDataBufNum); m_FreeListIOOpers.push_back(pPerIOData); } //初始化预分配的客户端 InitClients(); //得到CPU的数量 SYSTEM_INFO sysInfo; GetSystemInfo(&sysInfo); //根据cpu数量创建完成端口 m_hCompletionPort=CreateIoCompletionPort(INVALID_HANDLE_VALUE,NULL,0,sysInfo.dwNumberOfProcessors); //创建完成端口失败 if(m_hCompletionPort==NULL) { PutErrorString(NET_MODULE,"%-15s %s",__FUNCTION__,"创建完成端口失败!"); return false; } //创建网络主线程 bool bRet = CreateNetMainThread(); if(!bRet) { PutErrorString(NET_MODULE,"%-15s %s",__FUNCTION__,"创建网络主线程失败!"); return false; } //创建在完成端口上等待的工作者线程 bRet=CreateWorkerThreads(sysInfo.dwNumberOfProcessors); if(!bRet) { PutErrorString(NET_MODULE,"%-15s %s",__FUNCTION__,"创建工作线程失败!"); return false; } //客户端方式启动 if(bMode&0x1) { } //服务器方式启动 if(bMode&0x2) { //Host(dwPort,strIP,nSocketType); } //设置本机IP SetHostName(); return true; }
IPAddress & IPAddress::operator=(const char *pcNewHostName) { SetHostName(pcNewHostName, false); return *this; }