socket 設定阻塞超時

2021-06-27 17:13:13 字數 816 閱讀 6985

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...