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; }
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; }
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; }