我是这样弄的。int recv(SOCKET h_handle,char *pc_buff,int i_massagelen)//h_hanle发送方的套接字, i_massagelen是数据长度{int recvlen = 0while(recvlen<i_massagelen){recvlen += recv(h_handle,pc_buff+recvlen,i_massagelen-recvlen,0);}rerurn 0;}这个函数的作用是接收固定长度的数据。但是有个问题出现了,如果发送方在突然关闭了或者网络原因断网了。此函数就会永远死等下去。请教怎么样检测h_handle是否关闭了。或者说怎么样才能在h_handle关闭了此函数能马上跳出while循环?(我表达能力有限)或者有什么函数能检测h_handle是否处于连接状态?
2 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
是你写的有问题,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;
}
- 2 回答
- 0 关注
- 260 浏览
添加回答
举报
0/150
提交
取消