免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4172 | 回复: 2
打印 上一主题 下一主题

怎么来处理recv接收超时的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-30 10:34 |只看该作者 |倒序浏览
我现在利用socket来实现数据传递,在服务端单独开辟一个线程来专门接收数据并处理,因为客户端一次传来的数据是不定的(可能一次又多条记录),客户端采取的是循环发送的方法。
服务端伪码:

  1. void* servethread(void* para)
  2. {
  3.        ......
  4. while((numbytes=recv(fd, buf, MAXDATASIZE, 0))>0){
  5.        if(strcmp(buf,"flag"))
  6.         break;
  7.         do_something();
  8.        }
  9.        send();
  10.        ......
  11. }
复制代码

服务端根据判断,如果接收到结束标志flag则退出循环,否则会一直接收;
问题是:客户端发送数据时,一旦出现问题数据只发送了一半,服务端接受不到结束标志则会一直停在那,直到超时主线程也一起退出。
   查了一下资料,可以设置超时退出循环,用的是setjmp,但这个说一般不太安全,大家还有没有什么好的解决办法。

论坛徽章:
0
2 [报告]
发表于 2006-03-30 12:05 |只看该作者
改用非阻塞吧

论坛徽章:
0
3 [报告]
发表于 2006-03-30 16:30 |只看该作者
用非阻塞方式可以解决问题么?关键是我操作的过程中还需要对数据库进行操作,所以必须用阻塞方式!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP