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;
}
...全文
1110 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Pingo520 2017-02-15
  • 打赏
  • 举报
回复
http://blog.csdn.net/tiandyoin/article/details/30044781 看看这个,你的疑问就解决了
HP_69 2016-12-30
  • 打赏
  • 举报
回复
后来 发现,当客户端调用 closesocket后,服务器产生了socket-error 错误,错误代号10054。求教,客户端应该怎么断才能不是这个错误?返回0呢?

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧