lwip設定recv接收函式超時時間

2021-10-03 03:05:55 字數 3596 閱讀 1290

在socket程式設計中,經常使用recv函式阻塞等待接收資料。

如果對方gg了(接收到你的資料之後並沒有返回,你這裡會一直等待下去),顯然我們是不希望出現這種情況的。

一般情況下,考慮到對方的資料處理時間,我們可以設定乙個超時時間,比如10s,10s之後如果對方還沒返回訊息,我們就應該做相應的處理。

核心**:

struct timeval tv_out;

tv_out.tv_sec =5;

tv_out.tv_usec =0;

setsockopt

(socket, sol_socket, so_rcvtimeo,

&tv_out,

sizeof

(tv_out)

);

下方是乙個demo,其中使用了ulog元件可以方便的檢視日誌時間,我們把超時時間設定的5s,可以看到server監聽後,socket號為1的客戶端連線上了,我們設定5s超時時間,開始接收:

(1)一直沒有資料發過來,5s時間之後,我們recv超時返回-1,接下來我們進行相應操作,主動斷開這個連線;

(2)如果有資料發過來,recv返回資料長度,進行正確資料處理後繼續recv,此時又重新開始5s倒計時;

(3)如果等待過程中客戶端主動關閉socket連線,那麼recv返回0,進行退出操作。

/* 初始化預連線的服務端位址 */

listen_addr.sin_family = af_inet;

listen_addr.sin_port =

htons

(port)

; listen_addr.sin_addr =*(

(struct in_addr *

) host->h_addr)

; listen_addr.sin_addr.s_addr = netdev->ip_addr.addr;

rt_memset(&

(listen_addr.sin_zero),0

,sizeof

(listen_addr.sin_zero));

if(bind

(sock_listen,

(struct sockaddr *

)&listen_addr,

sizeof

(struct sockaddr)

)<0)

listen

(sock_listen,3)

;log_d

("begin listing...");

while(1

)char tid_name[10]

="cli"

;char tid_num[10]

;itoa

(sock_connect, tid_num,10)

;strcat

(tid_name, tid_num)

;struct client_info *client;

client =

rt_malloc

(sizeof

(struct client_info));

client->socketnum = sock_connect;

rt_memcpy

(&client->addr,

&connect_addr,

sizeof

(struct sockaddr_in));

client->sockaddrlen = sin_size;

tid =

rt_thread_create

(tid_name, client_thread_entry,

(void

*) client,

4096,25

,10);

if(tid == rt_null)

rt_thread_startup

(tid);}

__exit:

log_d

("close listener...");

/* 關閉這個 socket */

closesocket

(sock_listen)

;return;}

msh_cmd_export

(tcpserver, tcpserver)

;

php int 設定超時,php如何設定超時時間

php設定超時的解決方法 1 初始設定指令碼執行時間 開啟php.ini檔案,找到 max execution time 30 修改為 max execution time 600 如果你沒有伺服器修改許可權,可通過內建php指令碼的方法設定超時時間,在需要首席執行官時間操作的php檔案中新增以下 ...

給XMLHttpRequest設定超時時間

在web開發中,經常要用到ajax技術,有時因為功能很簡單,不想利用現成的框架,就只是想利用xmlhttprequest來手動處理ajax功能,這時,會遇到乙個很現實的問題,就是ajax請求的超時問題。如果我們利用jquery這樣的框架,是可以直接設定超時時間的,但是xmlhttprequest物件...

設定ssh超時時間

方法一 最近公司剛剛買了一台hyper v的vps,但是連線ssh伺服器剛剛離開一會就斷開,不得不需要反覆連線伺服器,為了使ssh伺服器可以保持足夠的連線時間,大家可以按以下方法設定 基於安全的理由,如果使用者連線到 ssh server 後閒置,ssh server 會在超過特定時間後自動終止 s...