调用send后,实际发送的数据量不一定等于设定的数据长度,原因是网络拥塞,缓冲区满或其他异常
实现一个safesend函数,如下
int SafeSend(SOCKET sock, Uint8* pBuf, int nLen)
{
int nRet = 0;
int nSended = 0;
int ntry = 0;
while (nSended < nLen) {
nRet = send(sock, pBuf + nSended, nLen - nSended, 0);
if (nRet <= 0) {
if (ntry < 5) {
TSK_sleep(1);
ntry++;
continue;
}else {
break;
}
}
ntry = 0;
nSended += nRet;
}
if (nSended < nLen) {
return -1;
}
return nSended;
}
|