个人主页https://xugaoxiang.com,微信公众号: Dev_Club 或者搜索 程序员Club
全部博文(229)
分类: 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使用的是方法二