wangchenxicool

博客园 首页 联系 管理
int DataSend(SOCKET s, char *DataBuf, int DataLen)//将DataBuf中的DataLen个字节发到s去  
{
int nBytesLeft = DataLen;
int nBytesSent = 0;
int ret;
//set socket to blocking mode
int iMode = 0;
ioctlsocket(s, FIONBIO, (u_long FAR*) &iMode);
while(nBytesLeft > 0)
{
ret = send(s, DataBuf + nBytesSent, nBytesLeft, 0);
if(ret <= 0)
break;
nBytesSent += ret;
nBytesLeft -= ret;
}
return nBytesSent;
}

int PipeThiread(int i)//在两个SOCKET中进行数据转发
{

char RecvBuf[MAXBUFFER] = {0};
fd_set Fd_Read;
int ret, nRecv;

while(1)
{
FD_ZERO(&Fd_Read);
FD_SET(H_SERVER_PIPE_LIST[i].Client, &Fd_Read);
FD_SET(H_SERVER_PIPE_LIST[i].Server, &Fd_Read);
ret = select(0, &Fd_Read, NULL, NULL, NULL);
if(ret <= 0)
PipeDATA_Close(i);
if(FD_ISSET(H_SERVER_PIPE_LIST[i].Client, &Fd_Read))
{
nRecv = recv(H_SERVER_PIPE_LIST[i].Client, RecvBuf, sizeof(RecvBuf), 0);
if(nRecv <= 0)
PipeDATA_Close(i);
ret = DataSend(H_SERVER_PIPE_LIST[i].Server, RecvBuf, nRecv);
if(ret == 0 || ret != nRecv)
PipeDATA_Close(i);
}
if(FD_ISSET(H_SERVER_PIPE_LIST[i].Server, &Fd_Read))
{
nRecv = recv(H_SERVER_PIPE_LIST[i].Server, RecvBuf, sizeof(RecvBuf), 0);
if(nRecv <= 0)
PipeDATA_Close(i);
ret = DataSend(H_SERVER_PIPE_LIST[i].Client, RecvBuf, nRecv);
if(ret == 0 || ret != nRecv)
PipeDATA_Close(i);
}
}
return 0;
}
posted on 2011-10-16 07:29  wangchenxicool  阅读(318)  评论(0)    收藏  举报