//====================================================================================== 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; }
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; }
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); }
//====================================================================================== 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; }