- 论坛徽章:
- 0
|
1
创建socket的时候 我们可以设置它为阻塞或者非阻塞,那么在recv/send时,flag参数指定的阻塞和非阻塞和socket本身有没有关系没有、
从驱动层面分析,如果socket阻塞的时候,从socket读数据都为阻塞的。如果是这样那么recv时指定的flag参数如何解释 ,是忽略它呢 还是重新将socket指定为
flag指定的方式(阻塞或非阻塞)进行读写数据,求大牛指点
2
recv数据的时候,我们recv一次有可能数据接收不完,但是到底要recv多少次才算完呢?
int buf[512];
i = 0;
alllen = 0;
while(1)
{
len = recv(socket,buf, 512, 0);
if (len > 0)
{
alllen += len;
/* framedata为真正完整想要数据的缓冲,可以认为很大 */
putbuf(framedata + i * 512 , buf, len);
if (len <512 )
break;
i++;
}
}
deal(framedata, alllen);
像上面的代码 猛看起来没问题,但是仔细分析还是存在问题的,如果想要的数据 2050字节,那么我recv 5次即可以收完,
但是如果想要的数据是2048字节 就存在问题,recv完成4次后,还会一直在接收数据,何时是个头呀 ?
请教大牛这时 如何判断数据接收完成。
请注意前提是你不知道对方发的一包长度是多少,可能是2050也可能是2048? 这时 如何准确判断收完完整的一包数据?
|
|