多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > php教程 > linux下socket連接下的心跳機(jī)制

linux下socket連接下的心跳機(jī)制

來(lái)源:程序員人生   發(fā)布時(shí)間:2015-02-10 08:32:13 閱讀次數(shù):4607次

1,在長(zhǎng)連接下,有可能很長(zhǎng)1段時(shí)間都沒(méi)有數(shù)據(jù)來(lái)往

理論上說(shuō),這個(gè)連接是1直保持連接的,但是實(shí)際情況中,如果中間節(jié)點(diǎn)出現(xiàn)甚么故障是難以知道的。

有的節(jié)點(diǎn)(防火墻)會(huì)自動(dòng)把1定時(shí)間以內(nèi)沒(méi)有數(shù)據(jù)交互的連接給斷掉。

在這個(gè)時(shí)候,就需要我們的心跳包了,用于保持長(zhǎng)連接,保活

2,心跳包之所以叫心跳包是由于:它像心跳1樣每隔固定時(shí)間發(fā)1次,以此來(lái)告知服務(wù)器,這個(gè)客戶端還活著。事實(shí)上這是為了保持長(zhǎng)連接,至于這個(gè)包的內(nèi)容,是沒(méi)有甚么特別規(guī)定的,不過(guò)1般都是很小的包,或只包括包頭的1個(gè)空包。心跳包主要也就是用于長(zhǎng)連接的保活和斷線處理。1般的利用下,判定時(shí)間在30⑷0秒比較不錯(cuò)。如果實(shí)在要求高,那就在6⑼秒。


3,下面為封裝好的心跳包函數(shù),加入項(xiàng)目中參數(shù)設(shè)置1下便可

#include <netinet/tcp.h> //參數(shù)解釋 //fd:網(wǎng)絡(luò)連接描寫(xiě)符 //start:首次心跳偵測(cè)包發(fā)送之間的空閑時(shí)間 //interval:兩次心跳偵測(cè)包之間的間隔時(shí)間 //count:探測(cè)次數(shù),行將幾次探測(cè)失敗判定為T(mén)CP斷開(kāi) int set_tcp_keepAlive(int fd, int start, int interval, int count) { int keepAlive = 1; if (fd < 0 || start < 0 || interval < 0 || count < 0) return ⑴; //入口參數(shù)檢查 ,編程的好習(xí)慣。 //啟用心跳機(jī)制,如果您想關(guān)閉,將keepAlive置零便可 if(setsockopt(fd,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive)) == ⑴) { perror("setsockopt"); return ⑴; } //啟用心跳機(jī)制開(kāi)始到首次心跳偵測(cè)包發(fā)送之間的空閑時(shí)間 if(setsockopt(fd,SOL_TCP,TCP_KEEPIDLE,(void *)&start,sizeof(start)) == ⑴) { perror("setsockopt"); return ⑴; } //兩次心跳偵測(cè)包之間的間隔時(shí)間 if(setsockopt(fd,SOL_TCP,TCP_KEEPINTVL,(void *)&interval,sizeof(interval)) == ⑴) { perror("setsockopt"); return ⑴; } //探測(cè)次數(shù),行將幾次探測(cè)失敗判定為T(mén)CP斷開(kāi) if(setsockopt(fd,SOL_TCP,TCP_KEEPCNT,(void *)&count,sizeof(count)) == ⑴) { perror("setsockopt"); return ⑴; } return 0; }

將想設(shè)置的參數(shù)傳入該函數(shù),設(shè)置成功返回0,否則返回⑴。設(shè)置成功以后,可以將fd交給select去監(jiān)聽(tīng)可讀可寫(xiě)事件,如果select檢測(cè)到fd可讀且read返回毛病,1般就可以判定該fd對(duì)應(yīng)的TCP連接已異常斷開(kāi),調(diào)用close函數(shù)將fd關(guān)閉便可。


TCP連接非正常斷開(kāi)的檢測(cè)(KeepAlive探測(cè))

此處的”非正常斷開(kāi)”指TCP連接不是以優(yōu)雅的方式斷開(kāi),如網(wǎng)線故障等物理鏈路的緣由,還有突然主機(jī)斷電等緣由

有兩種方法可以檢測(cè):1.TCP連接雙方定時(shí)發(fā)握手消息 2.利用TCP協(xié)議棧中的KeepAlive探測(cè)

第2種方法簡(jiǎn)單可靠,只需對(duì)TCP連接兩個(gè)Socket設(shè)定KeepAlive探測(cè)。

從而得知連接已失效,客戶端程序便有機(jī)會(huì)及時(shí)履行清除工作、提示用戶或重新連接



生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 自由成熟的性色视频免费观看 | 国产精美视频 | 中文字幕一区二区在线观看 | 逼逼网| 国产精品久久久久久久久久一区 | 91欧美激情一区二区三区成人 | 亚洲国产aaa毛片无费看 | 欧美日韩另类综合 | 欧美jizzhd精品欧美另类 | 91精品欧美综合在线观看 | 国产高清视频免费人人爱 | 欧美一区精品 | 欧美啊v在线 | 欧美精品一国产成人性影视 | 一级a毛片免费观看久久精品 | 国产精品99久久久久久人 | 日本特黄a级高清免费酷网 日本特黄的免费大片视频 日本特黄高清免费大片爽 日本特黄色大片 | 国产乱辈通伦影片在线播放 | 羞羞动漫免费看 | 午夜精品久久久久久91 | 国产精品冒白浆免费视频 | 4日本私人vps生活大片 | 国产视频一区二 | 亚洲欧美自拍另类图片色 | 美女嗯啊 | 永久免费在线播放 | 日本精品一区二区在线播放 | 亚洲视频在线观看网站 | 人人爱人人射 | 亚洲最新在线 | 欧美日韩一区二区三区视视频 | 老司机在线观看 | 日韩一级在线观看 | 亚洲日韩天堂 | 免费区欧美一级毛片 | 亚洲黄色一区二区 | 午夜影放免费观看 | 国产成+人欧美+综合在线观看 | 国产亚洲精品久久久久久久网站 | 欧美一区二区三区综合色视频 | 伊人久久大 |