windows 下 socket编程,recv 函数在 客户端 断开后或者内容发送完毕后,返回-1,而不是返回0,这是为什么?
HP_69 2016-12-30 02:39:32 unsigned WINAPI HandleClnt(void * arg)
{
SOCKET hClntSock = *((SOCKET*)arg);
int strlen = 0;
char msg[BUF_SIZE];
while ((strlen = recv(hClntSock, msg, sizeof(msg), 0))!=0)
{
SendMsg(msg, strlen); // 这里strlen的长度没有出现0,只是字节数或-1.
}
WaitForSingleObject(hMutex, INFINITE);
for (size_t i = 0; i < clntCnt; i++)
{
if (hClntSock == clntSocks[i])
{
while (i < clntCnt-1)
{
clntSocks[i] = clntSocks[i + 1];
++i;
}
break;
}
}
clntCnt--;
printf("counts = %d\n", clntCnt);
ReleaseMutex(hMutex);
closesocket(hClntSock);
return 0;
}