Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2121985
  • 博文数量: 229
  • 博客积分: 7217
  • 博客等级: 上校
  • 技术积分: 3224
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-19 17:23
个人简介

个人主页https://xugaoxiang.com,微信公众号: Dev_Club 或者搜索 程序员Club

文章分类

全部博文(229)

文章存档

2017年(1)

2016年(20)

2015年(23)

2013年(1)

2012年(23)

2011年(68)

2010年(62)

2009年(31)

分类: LINUX

2011-06-14 14:25:55

网络通讯中,在创建socket后以阻塞的方式读写,如果没有数据可读的话,程序会一直等待。在通讯过程中很有可能出现网络连接断开的情况。因此在程序中有必要对这种情况进行检测,并且进行处理。

socket接收超时

      setsockopt可以设置套接字的属性,其中包括接收超时时间,如:

      struct timeval tv; // 描述时间的结构体变量
      tv.tv_sec = 5; //socket等待数据的最大时间为5秒
      tv.tv_usec = 0;
      setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv))

select函数

      select 函数通常被用来实现多路IO复用,可以利用它来实现超时处理,如:
      struct timeval tv; // 描述时间的结构体变量
      fdset rdfds; // 定义读描述符集合
      tv.tv_sec = 5;
      tv.tv_usec = 0;
      FD_ZERO(&rdfds);
      FD_SET(sockfd, &rdfds);
      if (select(sockfd+1, &rdfds, NULL, NULL, &tv) == 0)
      {
          //process timeout
      }

QT.4.7.1使用的是方法二

阅读(2403) | 评论(0) | 转发(0) |
0

上一篇:QT/WebKit::Webgl

下一篇:Linux下gcc -rpath

给主人留下些什么吧!~~