Talk is cheap,show me the code.
do{
memset(buf, 0, BUFSIZ);
strLen = recv(reads.fd_array[i], buf, BUFSIZ - 1, 0);
if (strLen == 0 || strLen == -1){
FD_CLR(reads.fd_array[i], &reads);
closesocket(cpyReads.fd_array[i]);
printf("closed client:%d \n", cpyReads.fd_array[i]);
}
else{
printf("From %d : %s", cpyReads.fd_array[i], buf);
//send(reads.fd_array[i], buf, strLen, 0);
}
} while (strLen==BUFSIZ-1);
我设置的BUFSIZ 是10
我在调用recv函数来取客户端发过来的数据时,如果收到的数据长度大于我设置的缓冲大小也就是BUFSIZ 比如发过来的是10个字符 , 那么do while 循环会循环两次,如果我发送过来的正好是9个字符 , 为啥只循环了一次呢。我调试看到 strLen 明明等于BUFSIZ-1 的 , 于是在上面的memset处加的断点,才知道确实是循环了两次, 可是执行到 recv函数的时候 整个循环直接跳出来了,不太明白这里,求大神讲解一下,站等。。。