日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(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ù):4611次

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ò)連接描寫符 //start:首次心跳偵測(cè)包發(fā)送之間的空閑時(shí)間 //interval:兩次心跳偵測(cè)包之間的間隔時(shí)間 //count:探測(cè)次數(shù),行將幾次探測(cè)失敗判定為TCP斷開(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è)失敗判定為TCP斷開(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)可讀可寫事件,如果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)閉
程序員人生
主站蜘蛛池模板: 精品国产一区二区三区免费 | 日日艹 | 亚洲第一区在线 | 成人精品视频在线观看 | 国产日韩欧美一区二区三区乱码 | 色婷婷狠狠 | 久久这里都是精品 | 国产精品视频免费观看 | 综合网视频 | 免费a级毛片在线播放 | 97精品在线视频 | 懂色av蜜乳av一二三区 | 日韩 国产 欧美 精品 在线 | 成人av影视在线 | 精品欧美一区二区久久久 | 日本aa大片在线播放免费看 | 亚洲高清在线视频 | 精品日韩在线观看 | 欧美亚洲天堂 | 免费在线看a | 精品无码久久久久久久动漫 | 日韩视频一区二区三区四区 | 欧美成人一区二区三区 | 国产精品视频专区 | 综合导航| 日本成人在线播放 | 国产电影av | 高清视频一区 | 波多野结衣精品视频 | 中文字幕不卡 | 99re8在线精品视频免费播放 | 日韩欧美综合在线视频 | 黄色电影网站在线观看 | 日韩av网站大全 | 草视频在线| 在线观看av网 | 国产精品一二三区 | 欧美一区二区三区在线看 | 少妇性bbb搡bbb爽爽爽欧美 | 免费观看成人 | 亚洲色图第一页 |