摘要:我们在网络编程中常见的一种做法是:创建好套接字后以阻塞的方式读写,如果没有数据可读的话,程序会一直等待。事实上,网络状况一直不断变化,很有可能在通讯过程中出现网络连接断开。我们在程序中有必要对这种情况进行检测,从而及时做出响应。下面介绍几种常用的超时检测方法(假设我们要求通过套接字等待数据的最大时间为8秒):
我们在网络编程中常见的一种做法是:创建好套接字后以阻塞的方式读写,如果没有数据可读的话,程序会一直等待。事实上,网络状况一直不断变化,很有可能在通讯过程中出现网络连接断开。我们在程序中有必要对这种情况进行检测,从而及时做出响应。下面介绍几种常用的超时检测方法(假设我们要求通过套接字等待数据的最大时间为8秒):
一、 设置套接字接收超时
setsockopt可以设置套接字的属性,其中包括接收超时时间。参考代码如下
struct timeval tv; // 描述时间的结构体变量
……
tv.tv_sec = 8;
tv.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
……
二、 多路IO复用SELECT
SELECT 函数通常被用来实现多路IO复用,同样可以利用它来实现超时处理。参考代码如下:
struct timeval tv; // 描述时间的结构体变量
fdset rdfds; // 定义读描述符集合
……
tv.tv_sec = 8;
tv.tv_usec = 0;
FD_ZERO(&rdfds);
FD_SET(sockfd, &rdfds);
[1] [2]
通信工程师备考资料免费领取
去领取