linux的KEEPALIVE屬性伺帘,心跳機(jī)制

對(duì)于面向連接的TCP socket,在實(shí)際應(yīng)用中通常都要檢測(cè)對(duì)端是否處于連接中,連接端口分兩種情況:

  • 1、連接正常關(guān)閉,調(diào)用close() shutdown()連接優(yōu)雅關(guān)閉,send與recv立馬返回錯(cuò)誤,select返回SOCK_ERR;
  • 2妄讯、連接的對(duì)端異常關(guān)閉,比如網(wǎng)絡(luò)斷掉,突然斷電.

對(duì)于第二種情況,判斷連接是否斷開的方法有一下幾種:
  • 自己編寫心跳包程序,簡(jiǎn)單的說(shuō)就是自己的程序加入一條線程,定時(shí)向?qū)Χ税l(fā)送數(shù)據(jù)包,查看是否有ACK,根據(jù)ACK的返回情況來(lái)管理連接肠鲫。此方法比較通用,一般使用業(yè)務(wù)層心跳處理,靈活可控,但改變了現(xiàn)有的協(xié)議;
  • 使用TCP的keepalive機(jī)制,UNIX網(wǎng)絡(luò)編程不推薦使用SO_KEEPALIVE來(lái)做心跳檢測(cè)(為什么??)。keepalive原理:TCP內(nèi)嵌有心跳包,以服務(wù)端為例,當(dāng)server檢測(cè)到超過(guò)一定時(shí)間(/proc/sys/net/ipv4/tcp_keepalive_time 7200 即2小時(shí))沒有數(shù)據(jù)傳輸,那么會(huì)向client端發(fā)送一個(gè)keepalive packet,此時(shí)client端有三種反應(yīng):
    1榜轿、client端連接正常,返回一個(gè)ACK.server端收到ACK后重置計(jì)時(shí)器,在2小時(shí)后在發(fā)送探測(cè).如果2小時(shí)內(nèi)連接上有數(shù)據(jù)傳輸,那么在該時(shí)間的基礎(chǔ)上向后推延2小時(shí)發(fā)送探測(cè)包;
    2幽歼、客戶端異常關(guān)閉,或網(wǎng)絡(luò)斷開。client無(wú)響應(yīng),server收不到ACK,在一定時(shí)間(/proc/sys/net/ipv4/tcp_keepalive_intvl 75 即75秒)后重發(fā)keepalive packet, 并且重發(fā)一定次數(shù)(/proc/sys/net/ipv4/tcp_keepalive_probes 9 即9次);
    3谬盐、客戶端曾經(jīng)崩潰,但已經(jīng)重啟.server收到的探測(cè)響應(yīng)是一個(gè)復(fù)位,server端終止連接甸私。

SO_KEEPALIVE的缺點(diǎn):

根據(jù)MSDN的文檔,如果為socket設(shè)置了KEEPALIVE選項(xiàng)飞傀,TCP/IP棧在檢測(cè)到對(duì)方掉線后, 任何在該socket上進(jìn)行的調(diào)用(發(fā)送/接受調(diào)用)就會(huì)立刻返回皇型,錯(cuò)誤號(hào)是WSAENETRESET;同時(shí)砸烦,此后的任何在該socket句柄的調(diào)用會(huì)立刻失敗弃鸦,并返回WSAENOTCONN錯(cuò)誤。

該機(jī)制的缺點(diǎn):

  • 一幢痘、SO_KEEPALIVE無(wú)法控制唬格,它會(huì)每時(shí)每刻都發(fā);
  • 二、SO_KEEPALIVE設(shè)置空閑2小時(shí)才發(fā)送一個(gè)“保持存活探測(cè)分節(jié)”西轩,不能保證實(shí)時(shí)檢測(cè)员舵。對(duì)于判斷網(wǎng)絡(luò)斷開時(shí)間太長(zhǎng),對(duì)于需要及時(shí)響應(yīng)的程序不太適應(yīng)藕畔。
    當(dāng)然也可以修改時(shí)間間隔參數(shù)马僻,但是會(huì)影響到所有打開此選項(xiàng)的套接口!關(guān)聯(lián)了完成端口的socket可能會(huì)忽略掉該套接字選項(xiàng)注服。

參考鏈接:
在Linux環(huán)境下使用TCP的keepalive機(jī)制:實(shí)現(xiàn)了心跳函數(shù)韭邓,代碼邏輯清晰(看代碼)
http://www.tuicool.com/articles/yAJ36bz
Linux SO_KEEPALIVE屬性:對(duì)非活動(dòng)連接的檢測(cè)方法跟出現(xiàn)的情況寫的比較細(xì)致(看描述)
http://blog.csdn.net/callinglove/article/details/38380673
LINUX C網(wǎng)絡(luò)編程中的心跳機(jī)制:解釋了不使用SO_KEEPALIVE的缺點(diǎn)
http://blog.csdn.net/yuyin86/article/details/24997175

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溶弟,隨后出現(xiàn)的幾起案子女淑,更是在濱河造成了極大的恐慌,老刑警劉巖辜御,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸭你,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡擒权,警方通過(guò)查閱死者的電腦和手機(jī)袱巨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碳抄,“玉大人愉老,你說(shuō)我怎么就攤上這事∑市В” “怎么了嫉入?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)璧尸。 經(jīng)常有香客問(wèn)我咒林,道長(zhǎng),這世上最難降的妖魔是什么爷光? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任垫竞,我火速辦了婚禮,結(jié)果婚禮上瞎颗,老公的妹妹穿的比我還像新娘件甥。我一直安慰自己,他們只是感情好哼拔,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布引有。 她就那樣靜靜地躺著,像睡著了一般倦逐。 火紅的嫁衣襯著肌膚如雪譬正。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音曾我,去河邊找鬼粉怕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛抒巢,可吹牛的內(nèi)容都是我干的贫贝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蛉谜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼稚晚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起型诚,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤客燕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后狰贯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體也搓,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年涵紊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了傍妒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡栖袋,死狀恐怖拍顷,靈堂內(nèi)的尸體忽然破棺而出抚太,到底是詐尸還是另有隱情塘幅,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布尿贫,位于F島的核電站电媳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏庆亡。R本人自食惡果不足惜匾乓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望又谋。 院中可真熱鬧拼缝,春花似錦、人聲如沸彰亥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)任斋。三九已至继阻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瘟檩。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工抹缕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墨辛。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓卓研,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親睹簇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鉴分,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1、TCP狀態(tài)linux查看tcp的狀態(tài)命令:1)带膀、netstat -nat 查看TCP各個(gè)狀態(tài)的數(shù)量2)志珍、lso...
    北辰青閱讀 9,437評(píng)論 0 11
  • HTTP Keep-Alive 在http早期,每個(gè)http請(qǐng)求都要求打開一個(gè)tpc socket連接垛叨,并且使用一...
    jiangmo閱讀 4,760評(píng)論 0 2
  • 18.1 引言 TCP是一個(gè)面向連接的協(xié)議伦糯。無(wú)論哪一方向另一方發(fā)送數(shù)據(jù)之前,都必須先在雙方之間建立一條連接嗽元。本章將...
    張芳濤閱讀 3,390評(píng)論 0 13
  • 初涉IM敛纲,首先我有這么幾個(gè)問(wèn)題需要弄明白: Socket 和 WebSocket 有哪些區(qū)別和聯(lián)系? WebSoc...
    夜幕青雨閱讀 11,142評(píng)論 8 39
  • 今天來(lái)說(shuō)說(shuō)我的媽媽剂癌。 在我們家中淤翔,媽媽像水一樣 ,不動(dòng)聲色佩谷,安靜而有力量旁壮。 我家爸爸是絕對(duì)的權(quán)威,基本上大事都由爸...
    懶小俊閱讀 337評(píng)論 3 6