- 论坛徽章:
- 0
|
以下函数是接收报文代码一部分,服务器同时发送两个报文,接收时如何处理进行逐个报文接收。
现在实现是两个报文同时接收,请指教谢谢。
int recvDataFromL2Term(socket_t tsocket, char *dataBuf, int *datalen)//接收回执信息
{
fd_set rdset;
struct timeval tv;
int dLen = 0;
int ret = 0;
int bufferSize = 0;//接收数据的大小
tv.tv_sec = 2;
tv.tv_usec = 0;
FD_ZERO(&rdset);
FD_SET(tsocket, &rdset);
ret = selectSocket(tsocket + 1, &rdset, NULL, NULL, &tv);
if ( -1 == ret)
{
if ( errno == EINTR)//系统中断
{
return -1;
}
else //其它错误
{
return -1;
}
}
else if ( 0 == ret) //超时
{
return -1;
}
//接收数据
if ( FD_ISSET(tsocket, &rdset) )
{
dLen = recvData(tsocket, dataBuf + bufferSize, RECV_DATA_BUF_LEN - bufferSize, 0);
if ( dLen > 0)
{
bufferSize += dLen;
}
else if (dLen == 0) //对方关闭了连接, 接收的连接如果长度为0, 则对方关闭的连接
{
return -2;
}
else if (dLen < 0) //对方关闭了连接
{
return -2;
}
}
else
{
return -1;
}
*datalen = bufferSize;
return 0;
}
int recvData(socket_t tsocket, char * pRecvBuf, int nBufLen, int flags)//接受数据
{
int nRecvLen = 0;
if(tsocket > 0)
{
nRecvLen = recv(tsocket, pRecvBuf, nBufLen, flags);
}
return nRecvLen;
} |
|