示例#1
0
//======================================================================================
bool TcpSocket::Connect(uint32_t uiIP, uint16_t iPort, bool async)
{
	Log.i(SOCK_TAG, "TcpSocket::Connect uiIp:%u. iPort:%u, async:%s", uiIP, iPort, async ? "async" : "sync");
	WSADATA	wd;
	int result = WSAStartup(MAKEWORD(1, 1), &wd);
	if(result != 0){
		Log.e(SOCK_TAG, "WSAStartup failed, error code %u", result);
		return false;
	} 
	m_iSocket = socket(AF_INET, SOCK_STREAM, 0);
	if (m_iSocket == -1){
		int errorCode = WSAGetLastError();
		Log.e(SOCK_TAG, "TcpSocket::Connect socket fail, error code %u.", errorCode);
		return false;
	}

	struct sockaddr_in address;
	memset(&address, 0, sizeof(address));
	address.sin_family = AF_INET;
	address.sin_addr.s_addr = uiIP;
	address.sin_port = htons(iPort);

	m_ip = uiIP;
	m_iPort = htons(iPort);

	if (async)
	{
		Log.i(SOCK_TAG, "Set non block.");
		m_bConnected = false;
		SetNBlock();
		m_iLastRecvTime = SelectorEPoll::getInstance().m_iHaoMiao;
		m_pSelector->SetEvent(this, 0, SEL_RW);
	}

	if (connect(m_iSocket, (struct sockaddr*) &address, sizeof(address)) == -1) {
		int errorCode = WSAGetLastError();
		if (errorCode == WSAEWOULDBLOCK){
			Log.d(SOCK_TAG, "TcpSocket::Connect in progress. ip=%s", ip2str(uiIP));
			return true;
		}
		Log.w(SOCK_TAG, " TcpSocket::Connect %s:%u fail. error code: %u", ip2str(uiIP), iPort, errorCode);
		CloseSocket();
		return false;
	}

	m_iLastRecvTime = SelectorEPoll::getInstance().m_iHaoMiao;
	m_bConnected = true;
	SetNBlock();
	m_pSelector->SetEvent(this, 0, SEL_RW);
	return true;
}
示例#2
0
int OIDBClient::SendAndRecv()
{
    int iSockFD = -1;
	fd_set stFDSet;
	struct timeval  stTimeVal;

	iSockFD = socket(AF_INET, SOCK_DGRAM, 0);
	if(iSockFD < 0)
	{
	    snprintf(m_sErrMsg, sizeof(m_sErrMsg), "socket Error:%s", strerror(errno));
	    return -1 ;
	}

	SetNBlock(iSockFD);

    /*设置超时时间*/
	stTimeVal.tv_sec = m_uiTimeout;
	stTimeVal.tv_usec = 0;

	int iSendLen = sendto(iSockFD, &m_stReq, ntohs(m_stReq.stHead.sLength), 0, (struct sockaddr *)&m_stSendInfo.stToAddress, sizeof(m_stSendInfo.stToAddress));
	if(iSendLen != ntohs(m_stReq.stHead.sLength))
	{
		snprintf(m_sErrMsg, sizeof(m_sErrMsg), "sendto Error:%s", strerror(errno));
		close(iSockFD);
		iSockFD = -1;
		return -1;
	}

	FD_ZERO(&stFDSet);
	FD_SET(iSockFD, &stFDSet);
	if(select(iSockFD + 1, &stFDSet, NULL, NULL, &stTimeVal) <= 0)
	{
		snprintf(m_sErrMsg, sizeof(m_sErrMsg), "等待服务器响应超时[%s:%d]", m_sDestAddr.c_str(), m_iDestPort);
		close(iSockFD);
		iSockFD = -1;
		return -1;
	}

	if(FD_ISSET(iSockFD, &(stFDSet)))
	{
	    memset(&m_stResp, 0, sizeof(m_stResp));
		if((m_iRecvLen = recvfrom(iSockFD, &m_stResp, sizeof(m_stResp), 0, NULL, NULL)) <= 0)
		{
			snprintf(m_sErrMsg, sizeof(m_sErrMsg), "recvfrom Error:%s", strerror(errno));
            close(iSockFD);
			iSockFD = -1;
			return -1;
		}
	}
	else
	{
	    close(iSockFD);
		iSockFD = -1;
		return -1;
	}

    close(iSockFD);
	iSockFD = -1;
	return 0;
}
示例#3
0
文件: Forces.cpp 项目: sabeiro/Allink
void Forces::InitConst(){
  Shout("Init constants");  
  NEdge = 80+1;//NInEdge;
  Dx = 1./(double)(NEdge-1);
  Kf.El[0] = 11.;//2.*NEdge/10.;//Elastic coupling
  Kf.El[1] = 11.;//Elastic coupling
  Kf.El[2] = 11.;//Elastic coupling
  Kf.Lap = 20.*pow(Dx,2.);//bending rigidity
  Kf.SLap = 0.;//.015*pow(Dx,2.);//Surface tension
  Kf.Ext = 1.;
  Kf.LJ = 1.;
  Kf.LJMin = .5;
  Kf.CutOff2 = 1.;
  Kf.Cont = 0.;//.001;
  Kf.Elong[0] = 0.1;
  Kf.Elong[1] = 0.1;
  Kf.Elong[2] = 0.1;
  Kf.ForThr = 100.;
  IntMax = 100;
  IncrDist = 0.01;
  IfInterp=FIT_FORTH;
  IfFillMatrix=1;
  Nano->Rad = .05;
  Nano->Height = .3;
  ChemPotId = 0.;
  ChemPotEx = 0.;
  Nano->Pos[0] = 0.;
  Nano->Pos[1] = 0.;
  Nano->Pos[2] = .5;
  BoundCond[0] = 1;BoundCond[1] = 1;
  BoundCond[2] = 1;BoundCond[3] = 1;
  BoundCond[4] = 1;BoundCond[5] = 1;
  PeriodicImage[0] = 1;PeriodicImage[1] = 1;PeriodicImage[2] = 1;
  Time = 0.;
  NUpdate = 100;
  NWrite = 1000;
  NBin = 100;
  NTrialBias = 10;
  //  GaussVar = sqrt(1./pkSpr());
  ThermMode = THERM_LANG;
  CalcMode = CALC_LJ39;
  //  Part2Move = NEdge/2+NEdge;
#ifdef __glut_h__
  NSpline = 100;
  IfSphere = 0;
  IfLine = 1;
  IfSpline = 0;
  NShow = 1;
  IfMovie=0;
  Frame = 0;
  IfExt = 0;
  IfRot = 0;
  BeadType = 0;
#endif
  IfExit = 0;
  IfNano = 0;
  DynFlag = 0;
  SetNBlock(1);
}
示例#4
0
//======================================================================================
bool TcpSocket::Listen(uint32_t uiIP, uint16_t &iPort, bool bTryNext) {
	m_iSocket = socket(AF_INET, SOCK_STREAM, 0);
	if (m_iSocket == -1) {
		Log.e(SOCK_TAG, "TcpSocket::Listen get socket fail");
		return false;
	}

#if 0
	int op = 1;
	if (-1 == setsockopt(m_iSocket, SOL_SOCKET, SO_REUSEADDR, &op, sizeof(op))) {
		log(Error, "TcpSocket::Listen set socket fail");
		CloseSocket();
		return false;
	}
#endif

	struct sockaddr_in address;
	memset(&address, 0, sizeof(address));
	address.sin_family = AF_INET;
	address.sin_addr.s_addr = uiIP;
	for (int i = 0; i < 100; i++) {
		m_iPort = iPort;
		address.sin_port = htons(m_iPort);
		if (bind(m_iSocket, (struct sockaddr *) &address, sizeof(address)) < 0) {
			//log(Debug, "TcpSocket bind tcp socket port: %u failed", m_iPort);
			iPort++;
			continue;
		}

		//bind success
		if (listen(m_iSocket, SOMAXCONN) == -1) {
			Log.e(SOCK_TAG, "TcpSocket listen tcp socket port %u failed", m_iPort);
			CloseSocket();
			return false;
		}

		SetNBlock();
		//log(Info, "bind tcp socket:%u port:%u successed", m_iSocket, m_iPort);
		return true;
	}
	CloseSocket();
	Log.e(SOCK_TAG, "bind tcp socket port: %u-%u fails", m_iPort-100, m_iPort);
	return false;
}