• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉,開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            TCP連接非正常斷開的檢測

            Posted on 2010-12-29 10:38 S.l.e!ep.¢% 閱讀(1875) 評論(0)  編輯 收藏 引用 所屬分類: NetWork 、epoll

            TCP連接非正常斷開的檢測

            如果主機崩潰,write是否阻塞取決于內核的tcp緩沖區,但read將一直阻塞,直到超時ETIMEOUT,或由于某些中間路由器的原因返回EHOSTUNREACH/ENETUNREACH。select不能檢測到該情況。
            如果主機崩潰并重起,客戶的write到達主機時主機響應RST,客戶的read將返ECONNRESET。





            此處的”非正常斷開”指TCP連接不是以優雅的方式斷開,如網線故障等物理鏈路的原因,還有突然主機斷電等原因
            有兩種方法可以檢測:1.TCP連接雙方定時發握手消息 2.利用TCP協議棧中的KeepAlive探測
            第二種方法簡單可靠,只需對TCP連接兩個Socket設定KeepAlive探測,所以本文只講第二種方法在Linux,Window2000下的實現(在其它的平臺上沒有作進一步的測試)
            Windows 2000平臺下
            C++代碼 復制代碼
            1. //定義結構及宏 ??
            2. struct?TCP_KEEPALIVE?{ ??
            3. u_longonoff; ??
            4. u_longkeepalivetime; ??
            5. u_longkeepaliveinterval; ??
            6. }?; ??
            7. #define?SIO_KEEPALIVE_VALS?_WSAIOW(IOC_VENDOR,4) ??
            8. //KeepAlive實現 ??
            9. TCP_KEEPALIVE?inKeepAlive?=?{0};?//輸入參數 ??
            10. unsigned?long?ulInLen?=?sizeof(TCP_KEEPALIVE); ??
            11. TCP_KEEPALIVE?outKeepAlive?=?{0};?//輸出參數 ??
            12. unsigned?long?ulOutLen?=?sizeof(TCP_KEEPALIVE); ??
            13. unsigned?long?ulBytesReturn?=?0; ??
            14. //設置socket的keep?alive為5秒,并且發送次數為3次 ??
            15. inKeepAlive.onoff?=?1; ??
            16. inKeepAlive.keepaliveinterval?=?5000;?//兩次KeepAlive探測間的時間間隔 ??
            17. inKeepAlive.keepalivetime?=?5000;?//開始首次KeepAlive探測前的TCP空閉時間 ??
            18. if?(WSAIoctl((unsigned?int)s,?SIO_KEEPALIVE_VALS, ??
            19. (LPVOID)&inKeepAlive,?ulInLen, ??
            20. (LPVOID)&outKeepAlive,?ulOutLen, ??
            21. &ulBytesReturn,?NULL,?NULL)?==?SOCKET_ERROR) ??
            22. { ??
            23. ACE_DEBUG?((LM_INFO, ??
            24. ACE_TEXT?("(%P|%t)?\WSAIoctl?failed.?error?code(%d)!\n"),WSAGetLastError())); ??
            25. }??


            Linux平臺下
            C++代碼 復制代碼
            1. #include ??
            2. …… ??
            3. ////KeepAlive實現 ??
            4. //下面代碼要求有ACE,如果沒有包含ACE,則請把用到的ACE函數改成linux相應的接口 ??
            5. int?keepAlive?=?1;//設定KeepAlive ??
            6. int?keepIdle?=?5;//開始首次KeepAlive探測前的TCP空閉時間 ??
            7. int?keepInterval?=?5;//兩次KeepAlive探測間的時間間隔 ??
            8. int?keepCount?=?3;//判定斷開前的KeepAlive探測次數 ??
            9. if(setsockopt(s,SOL_SOCKET,SO_KEEPALIVE,(void*)&keepAlive,sizeof(keepAlive))?==?-1) ??
            10. { ??
            11. ACE_DEBUG?((LM_INFO, ??
            12. ACE_TEXT?("(%P|%t)?setsockopt?SO_KEEPALIVE?error!\n"))); ??
            13. } ??
            14. if(setsockopt(s,SOL_TCP,TCP_KEEPIDLE,(void?*)&keepIdle,sizeof(keepIdle))?==?-1) ??
            15. { ??
            16. ACE_DEBUG?((LM_INFO, ??
            17. ACE_TEXT?("(%P|%t)?setsockopt?TCP_KEEPIDLE?error!\n"))); ??
            18. } ??
            19. if(setsockopt(s,SOL_TCP,TCP_KEEPINTVL,(void?*)&keepInterval,sizeof(keepInterval))?==?-1) ??
            20. { ??
            21. ACE_DEBUG?((LM_INFO, ??
            22. ACE_TEXT?("(%P|%t)?setsockopt?TCP_KEEPINTVL?error!\n"))); ??
            23. } ??
            24. if(setsockopt(s,SOL_TCP,TCP_KEEPCNT,(void?*)&keepCount,sizeof(keepCount))?==?-1) ??
            25. { ??
            26. ACE_DEBUG?((LM_INFO, ??
            27. ACE_TEXT?("(%P|%t)setsockopt?TCP_KEEPCNT?error!\n"))); ??
            28. }??
            久久久久久久久无码精品亚洲日韩 | 国产三级观看久久| 青青草国产精品久久久久| 大蕉久久伊人中文字幕| 三级片免费观看久久| 久久精品无码专区免费青青| 99久久亚洲综合精品成人| 香蕉久久久久久狠狠色| 久久精品国产网红主播| 久久久久久av无码免费看大片| 精品久久久无码人妻中文字幕| 久久综合九色综合97_久久久| 久久久久亚洲AV无码专区首JN| 亚洲精品国产成人99久久| 久久人做人爽一区二区三区| 国产午夜精品久久久久九九| 无遮挡粉嫩小泬久久久久久久| 午夜精品久久影院蜜桃| 国产一区二区精品久久| 久久久久久午夜成人影院| 思思久久99热只有频精品66| 久久久青草青青国产亚洲免观| 国产精品18久久久久久vr| 男女久久久国产一区二区三区| 亚洲第一永久AV网站久久精品男人的天堂AV | 久久精品国产秦先生| 亚洲国产另类久久久精品小说 | 久久国产视频网| 四虎国产精品免费久久5151 | 亚洲另类欧美综合久久图片区| 久久99中文字幕久久| 精品久久久久久无码专区不卡| 久久综合狠狠综合久久97色| 久久激情亚洲精品无码?V| 草草久久久无码国产专区| 99久久99久久精品国产| 中文字幕成人精品久久不卡| 亚洲一本综合久久| 久久久久99精品成人片三人毛片| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 香港aa三级久久三级老师2021国产三级精品三级在 |