摘要:我們在網絡編程中常見的一種做法是:創建好套接字后以阻塞的方式讀寫,如果沒有數據可讀的話,程序會一直等待。事實上,網絡狀況一直不斷變化,很有可能在通訊過程中出現網絡連接斷開。我們在程序中有必要對這種情況進行檢測,從而及時做出響應。下面介紹幾種常用的超時檢測方法(假設我們要求通過套接字等待數據的最大時間為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]
通信工程師備考資料免費領取
去領取
專注在線職業教育25年