Linux c socket 数据读取丢失
如题
在使用read读取时,返回的数据偶尔会出现丢失的情况,正常是2520字节数据,丢失时返回1449字节
求高手将if(read(..)),改成循环读取,或者其他方式实现
char* buf = (char *) tpalloc("CARRAY", NULL, MAXDATASIZE);
if (read(sockfd, buf, MAXDATASIZE) == -1){
exit(1);
}
close(sockfd);
tpreturn(TPSUCCESS, 0, buf, strlen(buf) + 1, 0); Linux C socket
}
else if(nread==0)
{
break;
}
nleft-=nread;
ptr =nread;
}
return(n-nleft);
}
[解决办法]
socket,用的什么协议,tcp 和 udp 都会将信息分包的
[解决办法]
用的 TCP?
那说不定后面的 1449 字节还没传送到, 反复调用读取直到读够吧.
如果是 UDP,
这么大的数据包, 有可能被中间某个路由器切开了, UDP 是不会自动再组包的.