socket 接收压缩的数据时,总是接受不全
socket接受对方的数据但是连上报文头,接受到的数据如下:
HTTP/1.1 200 OK^M
108 Server: nginx/1.8.0^M
109 Date: Thu, 25 Jun 2015 17:22:22 GMT^M
110 Content-Type: application/json;charset=UTF-8^M
111 Content-Length: 2457^M
112 Connection: close^M
113 Content-Encoding: gzip^M
114 ^M
115 ^_XX
代码应该没有问题:如下:
//声明并设置信号量
struct sigaction alrmact;
memset(&alrmact,0,sizeof(alrmact));
alrmact.sa_handler = dealSigAlarm;
alrmact.sa_flags = SA_NODEFER;//使用SA_RESTART将会阻塞在recv函数,与直接使用signal效果相同
sigaction(SIGALRM, &alrmact, NULL);
alarm(EngineParameter::HTTP_RECIEVE_TIMEOUT / 1000);//设置警报时间,HTTP_RECIEVE_TIMEOUT单位为毫秒
while(1)
{
recvResult = recv(_sockfd, (void*)buf, bufferSize -1, MSG_WAITALL);
if (recvResult < 0)
{
if(errno == EINTR)
{
//socket recv超时
throw CMDError("Socket接收数据超时,错误号:" + FreeFun::toString(errno), "Socket recieve timeout, error no:" + FreeFun::toString(errno));
break;
}
else
{
//socket recv错误
throw CMDError("Socket接收数据错误,错误号:" + FreeFun::toString(errno), "Socket recieve error, error no:" + FreeFun::toString(errno));
break;
}
}
else if(recvResult == 0)
{
//这里表示对端的socket已正常关闭
break;
}
resultStream<<buf;
memset(buf, 0, bufferSize);
}
想请各位大神帮忙看一下。。。
感觉是我们这边还没接受完,对端已经关闭了,所以接受到的不完全,是不是可以这样理解,但是对方传来的数据长度并不大,且我设置的缓冲区的长度是8192,远大于他们的长度,应该一次发送完毕啊,为什么接受不全呢?