Beispiel #1
0
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;
}
Beispiel #2
0
//启动网络服务器
//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;
}
Beispiel #3
0
IPAddress &
IPAddress::operator=(const char *pcNewHostName)
{
    SetHostName(pcNewHostName, false);
    return *this;
}