猿问

您好,以下内容反映的是关于c++ recv()问题。高手进!

我是这样弄的。
int recv(SOCKET h_handle,char *pc_buff,
int i_massagelen)//h_hanle发送方的套接字, i_massagelen是数据长度
{
int recvlen = 0
while(recvlen<i_massagelen)
{
recvlen += recv(h_handle,pc_buff+recvlen,i_massagelen-recvlen,0);
}
rerurn 0;
}
这个函数的作用是接收固定长度的数据。
但是有个问题出现了,如果发送方在突然关闭了或者网络原因断网了。此函数就会永远死等下去。
请教怎么样检测h_handle是否关闭了。或者说怎么样才能在h_handle关闭了此函数能马上跳出while循环?(我表达能力有限)
或者有什么函数能检测h_handle是否处于连接状态?

富国沪深
浏览 261回答 2
2回答

慕工程0101907

是你写的有问题,socket的recv遇到错误返回的SOCKET_ERROR你也加到recvlen中去了,一直加,recvlen < i_messagelen永不成立,死循环。int recv(SOCKET h_handle,char *pc_buff,int i_massagelen)//h_hanle发送方的套接字, i_massagelen是数据长度{int recvlen = 0;while(recvlen<i_massagelen){int result = recv(h_handle,pc_buff+recvlen,i_massagelen-recvlen,0);if (result <= 0) break;recvlen+=result;}return recvlen;}

炎炎设计

因为服务器是一对多客户端;而对于客户端来说,是1对1服务器;所以,服务器在等待某个客户端的时候,去执行其他客户端的请求。
随时随地看视频慕课网APP
我要回答