if ((select(sockfd + 1), &readfd, NULL, NULL, &stime) > 0)
{
#if 1
nlen = recv(sockfd, pcBuffer, 199, 0);
printf("recv num(%d), buffer num(%d).\n", nlen, lRecvnum);
if ((lRecvnum + nlen) < 199)
{
lRecvnum += nlen;
pcBuffer += nlen;
printf("recv num(%d), buffer num(%d), buffer(%s).\n", nlen, lRecvnum, buf);
}
#else
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)
{
printf("recv num(%d), buffer num(%d).\n", nlen, lRecvnum);
if ((lRecvnum + nlen) < 199)
{
Recvnum += nlen;
pcBuffer += nlen;
printf("recv num(%d), buffer num(%d), buffer(%s).\n", nlen, lRecvnum, buf);
}
}
#endif
}
現在想問的是執行上面一段代碼,就是#if 1,recv返回的值是正常的,返回值是199跟寫到pcBuffer的數據是一樣的,但是如果把#if 1改成#if 0,執行下面在
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)的代碼分支的時候,recv的返回值一直是1,但是寫到pcBuffer的數據卻是正確的,這個是為什麼?recv的返回值是1,但是寫到pcBuffer中的個數卻不是1,而是正確的個數,為什麼這個時候的recv不返回不跟#if 1的時候是一樣的,也是199?
按正確的邏輯
while ((nlen = recv(sockfd, pcBuffer, 199, 0)) > 0)這個應該改為
Recvnum = 0;
while ((nlen = recv(sockfd, pcBuffer, 199- Recvnum, 0)) <199)
{
}