tcp長連線判斷對方斷開的方法

2021-05-27 03:26:53 字數 1139 閱讀 4209

1、心跳包

2、keepalive檢測,對於設定了keepalive來說,當tcp檢測到對端socket不再可用時(不能發出探測包,或探測包沒有收到ack的響應包),select會返回socket可讀,並且在recv時返回-1,同時置上errno為etimedout。此時tcp的狀態是斷開的。

struct tcp_keepalive  ;

#define sio_keepalive_vals _wsaiow(ioc_vendor,4)

/* keepalive實現 */

void set_keepalive (socket s)

/* 輸入引數 */

struct tcp_keepalive inkeepalive = ;

unsigned long ulinlen = sizeof(struct tcp_keepalive);

/* 輸出引數 */

struct tcp_keepalive outkeepalive = ;

unsigned long uloutlen = sizeof(struct tcp_keepalive);

unsigned long ulbytesreturn = 0;

int ret = 0;

/* 設定keepalive 為5秒,並且傳送次數為3次 */

inkeepalive.onoff = 1;

/* 2次keepalive探測間隔時間 */

inkeepalive.keepaliveinterval = 5000;

/* 開始首次keepalive探測前的tcp空閒時間 */

inkeepalive.keepalivetime = 5000;

ret = wsaioctl((unsigned int)s,

sio_keepalive_vals,

(lpvoid)&inkeepalive,

ulinlen,

(lpvoid)&outkeepalive,

uloutlen,

&ulbytesreturn,

null,

null);

if (ret == socket_error)

}

tcp的連線斷開

tcp的斷開連線是需要主機完成四次揮手的過程的,並不是斷網了就表示斷開連線了。假如雙方已經建立起了連線,突然一方斷網 比如突然停電,或者網線突然被拔了 對於另一方來講他並不會知道這個情況,他依然認為連線是沒有斷開的。四次揮手的過程是由系統完成的。如果要斷開連線,要麼是程序發起系統呼叫。或者,這個程序...

TCP的連線和斷開

1.tcp的三次握手連線 l請求端 通常稱為客戶端 傳送乙個syn段指名客戶端打算連線的伺服器的埠,以及初始序號。序號 3662298720確認序號 0 l伺服器端發回包含伺服器的初始序號的 syn段,同時對客戶端的序號進行加1作為應答 序號 1139382973,確認序號 3662298721 l...

TCP連線異常斷開的檢測

華清遠見嵌入式學院 講師。tcp是一種面向連線的協議,連線的建立和斷開需要通過收發相應的分節來實現。某些時候,由於網路的故障或是一方主機的突然崩潰而另一方無法檢測到,以致始終保持著不存在的連線。下面介紹一種方法來檢測這種異常斷開的情況 1 在tcp協議中提供了keepalive檢測。該選項使能後,在...