在send(),recv()過程中有時由於網路狀況等原因,收發不能預期進行,而設定收發超時控制:
這樣做在linux環境下是不會產生效果的,須如下定義:struct timeval timeout = ;
//設定傳送超時
setsockopt(socket,sol_socket,so_sndtimeo,(char *)&timeout,sizeof(struct timeval));
//設定接收超時
setsockopt(socket,sol_socket,so_rcvtimeo,(char *)&timeout,sizeof(struct timeval));
有兩點注意就是:
1)recv ()的第四個引數需為msg_waitall,在阻塞模式下不等到指定數目的資料不會返回,除非超時時間到。還要注意的是只要設定了接收超時,在沒有msg_waitall時也是有效的。說到底超時就是不讓你的程式老在那兒等,到一定時間進行一次返回而已。
2)即使等待超時時間值未到,但對方已經關閉了socket, 則此時recv()會立即返回,並收到多少資料返回多少資料。
socket超時設定
在使用socket程式設計時,肯定會遇到設定超時的問題。有些人可能會認為socket類的setsotimeout sotimeout 方法就是設定超時。其實不然,socket設定超時分為兩種,上面提到為讀寫超時。第一 建立連線的超時設定,如下 socket.connect socketaddress...
socket 設定阻塞超時
connect 設定超時 核心connect超時通常為75秒,我們可以設定更小的時間如10秒來提前從connect中返回 這裡用使用訊號處理機制,呼叫alarm,超時後產生sigalrm訊號 也可使用select實現 sigfunc sigfunc sigfunc signal sigalrm,co...
Socket連線超時設定
原文連線 一.基本概念 摘自 unix網路程式設計 卷1 14.2 套接字超時 在涉及套接字的i o操作上設定超時的方法有以下三種 1 呼叫alarm,它在指定超時期滿時產生sigalarm。這個方法涉及訊號處理,而訊號處理在不同的實現上存在差異,而且可能干擾程序中現有的alarm呼叫。2 在sel...