connect 設定超時
核心connect超時通常為75秒,我們可以設定更小的時間如10秒來提前從connect中返回
這裡用使用訊號處理機制,呼叫alarm,超時後產生sigalrm訊號 (也可使用select實現)
sigfunc * sigfunc ;//*************************sigfunc=signal(sigalrm, connect_alarm); //建立訊號處理函式connect_alarm,(如果有)儲存現有的訊號處理函式
if(alarm(10)!=0)
if(connect( ... )<0)
alarm(0);//關閉時鐘
signal(sigalrm, sigfunc); //(如果有)恢復原來的訊號處理函式
return;
}
//訊號處理函式
static void connect_alarm(int signo)
同樣可以為 recv 設定超時,5秒內收不到任何應答就中斷
signal( ... );alarm(5);
recv( ... );
alarm(0);
static void sig_alarm(int signo)
當客戶端阻塞於讀(readline,...)時,如果此時伺服器崩了,客戶tcp試圖從伺服器接收乙個ack,持續重傳資料分節,大約要等9分鐘才放棄重傳,並返回乙個錯誤。因此,在客戶讀阻塞時,呼叫超時。
socket 超時設定
在send recv 過程中有時由於網路狀況等原因,收發不能預期進行,而設定收發超時控制 這樣做在linux環境下是不會產生效果的,須如下定義 struct timeval timeout 設定傳送超時 setsockopt socket,sol socket,so sndtimeo,char ti...
socket超時設定
在使用socket程式設計時,肯定會遇到設定超時的問題。有些人可能會認為socket類的setsotimeout sotimeout 方法就是設定超時。其實不然,socket設定超時分為兩種,上面提到為讀寫超時。第一 建立連線的超時設定,如下 socket.connect socketaddress...
Socket連線超時設定
原文連線 一.基本概念 摘自 unix網路程式設計 卷1 14.2 套接字超時 在涉及套接字的i o操作上設定超時的方法有以下三種 1 呼叫alarm,它在指定超時期滿時產生sigalarm。這個方法涉及訊號處理,而訊號處理在不同的實現上存在差異,而且可能干擾程序中現有的alarm呼叫。2 在sel...