華清遠見嵌入式學院
講師。一、 設定套接字接收超時
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);
if (select(sockfd+1, &rdfds, null, null, &tv) == 0)
……三、 設定定時器
這種方法的原理是在從套接字接收資料之前先設定8秒鐘的定時器。如果8秒鐘內沒有資料到來,核心產生的sigalrm訊號會中斷當前的讀操作。我們知道設定訊號捕捉函式可以用signal函式或是sigaction函式。但這裡只能使用sigaction函式,因為signal設定的訊號處理函式執行完後會重新執行被中斷的操作。參考**如下:
void handler(int signo) // 自定義sigalrm訊號處理函式
struct sigaction act; // 描述訊號行為的變數
……sigaction(sigalrm, null, &act); // 獲取sigalrm訊號的屬性
act.sa_handler = handler; // 設定sigalrm訊號的處理函式
act.sa_flags &= ~sa_restart; // 關閉重啟被中斷操作的選項
sigaction(sigalrm, &act, null); // 設定sigalrm訊號的屬性
alarm(8); // 設定8秒鐘的定時器
……雖然我們是以套接字的讀操作為例,實際上在很多類似的情況中,大家都可以酌情採取上面介紹的方法。巧妙的運用所學知識會讓你的程式更加靈活和人性化。
網路程式設計中的超時檢測
華清遠見嵌入式學院 講師。一 設定套接字接收超時 setsockopt可以設定套接字的屬性,其中包括接收超時時間。參考 如下 struct timeval tv 描述時間的結構體變數 tv.tv sec 8 tv.tv usec 0 setsockopt sockfd,sol socket,so r...
網路程式設計中的超時檢測
一 設定套接字接收超時 setsockopt可以設定套接字的屬性,其中包括接收超時時間。參考 如下 struct timeval tv 描述時間的結構體變數 tv.tv sec 8 tv.tv usec 0 setsockopt sockfd,sol socket,so rcvtimeo,tv,si...
網路程式設計中的超時檢測
一 設定套接字接收超時 setsockopt可以設定套接字的屬性,其中包括接收超時時間。參考 如下 struct timeval tv 描述時間的結構體變數 tv.tv sec 8 tv.tv usec 0 setsockopt sockfd,sol socket,so rcvtimeo,tv,si...