Esempio n. 1
0
bool QueryData::UpdateBySocket(LPSVDBQUERY lpquery,const char *pdata,S_UINT len,LPSVDBRESULT ret,string addr,S_UINT timeout)
{
	tpport_t port=m_port;
	try{
	  IPV4Host ad(addr.c_str());

		MyTCPStream msock(ad,port);

		msock.SetNoDelay(true);


		//if(!m_sock.SConnect(ad,port))
		//	return false;

		if(!Socket_Send(msock,(void *)lpquery,sizeof(SVDBQUERY),timeout))
		{
			msock.Close();
			return false;
		}

		if(!Socket_Send(msock,(void*)pdata,len,timeout))
		{
			msock.Close();
			return false;

		}
		char *pert=NULL;
		S_UINT rlen=0;


		if(!Socket_Recev(msock,(void **)&pert,rlen,timeout))
		{
			msock.Close();
			return false;
		}
		msock.Close();

		if(rlen!=sizeof(SVDBRESULT))
		{
			if(pert!=NULL)
				delete [] pert;
			return false;
		}
		memcpy(ret,pert,rlen);
		delete [] pert;

		return ret->state==SVDB_OK;

	}catch(...)
	{
		puts("socket error");
		return false;
	}




	return true;
}
Esempio n. 2
0
bool QueryData::QueryBySocket(LPSVDBQUERY lpquery,LPDBQUERY lpdbquery,void **pret,S_UINT &len,string addr,S_UINT timeout)
{

	tpport_t port=m_port;
	try{
		IPV4Host ad(addr.c_str());
		MyTCPStream msock(ad,port);
		//if(!m_sock.SConnect(ad,port))
		//	return false;

		msock.SetNoDelay(true);


		if(!Socket_Send(msock,(void *)lpquery,sizeof(SVDBQUERY),timeout))
		{
			msock.Close();
			return false;
		}

		if(!Socket_Send(msock,(void*)lpdbquery,sizeof(DBQUERY),timeout))
		{
			msock.Close();
			return false;

		}

		if(!Socket_Recev(msock,pret,len,timeout))
		{
			msock.Close();
			return false;
		}

		msock.Close();


	}catch(...)
	{
		puts("socket error");
		return false;
	}


	return true;
}
Esempio n. 3
0
gboolean
Socket_SendPacket(SOCKET sock,               // IN
                  const char *payload,       // IN
                  int payloadLen)            // IN
{
   gboolean ok;
   char *sendBuf;
   int sendBufLen;

   if (!Socket_PackSendData(payload, payloadLen, &sendBuf, &sendBufLen)) {
      return FALSE;
   }

   ok = Socket_Send(sock, sendBuf, sendBufLen);
   free(sendBuf);

   return ok;
}
void libevent_work_thread(int fd, short ev, void *arg){
    LIBEVENT_WORK_THREAD *me =(LIBEVENT_WORK_THREAD *)arg;
    char buf[1], *pv_buf;
    int ffd;
    WTQ *work_child; 
    int pg_fds, m, pg_len, client_len, pack_len;
    DBP *_dbp;

    if (read(fd, buf, 1) != 1)
	    d_log("error Can't read from libevent pipe");

     
    work_child = wtq_queue_tail;
    wtq_queue_tail = wtq_queue_tail->next;

   // printf("thread_id:%llu\n", me->thread_id);

    FIND_WTQPID(work_child, me->thread_id);
    if(work_child->isjob == JOB_HAS)
        work_child->isjob = JOB_WORKING;
    else{
         goto ok;
    }
       
    ffd = work_child->rq_item->frontend->ffd;
    _dbp = me->tdbp;
    
    pack_len = PGStartupPacket3(ffd, _dbp);  /*  1. F -> B */
    
    if(pack_len == -1)goto ok; 

    pg_fds = Client_Init(conn_global->pg_host, conn_global->pg_port);
    if(pg_fds == -1){
        /*freedbp(_dbp);        */
        goto ok;
    }
    pg_len = Socket_Send(pg_fds, _dbp->inBuf, _dbp->inEnd);
    /*freedbp(_dbp);  */

    if(pg_len != pack_len) goto ok;
               
    AuthPG(pg_fds, ffd, _dbp);
                  
    work_child->isjob = JOB_FREE;
          
    if(notify_token_thread == NT_FREE){
        uint64_t u;
        ssize_t s;
        u = 1;
        s = write(token_efd, &u , sizeof(uint64_t));
        if(s != sizeof(uint64_t)){
            printf("write error s:%d\n", s);
        }
        //printf("token_efd\n");
    }


    ok:    
        close(pg_fds) ;
        close(work_child->rq_item->frontend->ffd);
        //if(close(work_child->rq_item->frontend->ffd) == -1)DEBUG("close fd error");
        work_child->rq_item->isjob = JOB_FREE;
        work_child->isjob = JOB_FREE;        
}