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檢測。該選項使能後,在...