revc函数线程无法退出

wangxue1629 2012-07-17 02:30:34
使用如下的线程接收数据,但是在网络断开或者网络故障时,线程无法自动退出,请问有什么好的方法来解决

DWORD WINAPI Recvthread(LPVOID lpparam)
{
SOCKET m_socket=(SOCKET)lpparam;

int ret;
int i ;
ofstream of2("rev.txt");
unsigned char buff[256];
of2<<" 接收进程启动 "<<endl;
while(1)
{
ret=recv(m_socket,(char *)buff,256,0);
//of2<<" 网络状态 "<<ret<<" 网络状态 "<<m_socket<<endl;
if(ret==SOCKET_ERROR)
{

RevLen=0;
closesocket (m_socket);
return -1;

}
else
{
RevLen=ret;
for(i=0;i<ret;i++)
{
RevBuff[i]=buff[i];
}
}

}

return 0;
}
...全文
37 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
RLib 2012-07-17
  • 打赏
  • 举报
回复
强制退出
sadgod 2012-07-17
  • 打赏
  • 举报
回复
目前而言,网络断开,程序能够立即100%无错误响应的方式好像还没有把,现在软件采用的技术都只能检测网线断开,定期检测ineternet通不通等等技术。
不过看到你这个线程使用方式其实不太好,最好用select或者epoll(windows下用IOCP)等方式来操作。

64,688

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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