• <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.¢% 閱讀(1869) 評論(0)  編輯 收藏 引用 所屬分類: NetWorkepoll

            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. }??
            国产成人精品久久| 国产精品美女久久久久av爽| 蜜臀久久99精品久久久久久小说| 久久99精品久久久久子伦| 国产A级毛片久久久精品毛片| 深夜久久AAAAA级毛片免费看| 久久久久99精品成人片欧美| 久久99精品国产麻豆蜜芽| 久久精品一区二区三区AV| 97久久超碰国产精品2021| 老司机午夜网站国内精品久久久久久久久 | 久久久国产亚洲精品| 国产精品无码久久四虎| 中文字幕乱码人妻无码久久| 久久99国产精品99久久| 久久精品国产日本波多野结衣| 99久久精品国产毛片| 99久久99久久久精品齐齐| 久久福利资源国产精品999| 99久久成人18免费网站| 久久精品国产亚洲AV大全| 亚洲国产成人久久精品99| 国内精品久久久久久久久| 国产精品久久久久久吹潮| 久久99久久99精品免视看动漫| 国产精品内射久久久久欢欢| 久久精品天天中文字幕人妻| 日韩电影久久久被窝网| 久久国产精品久久久| 国产综合久久久久| 精品综合久久久久久888蜜芽| 久久九九久精品国产免费直播| 亚洲欧美一区二区三区久久| 久久www免费人成精品香蕉| 国产99久久久国产精免费| 久久夜色精品国产亚洲| 久久播电影网| 精品久久久久久无码中文野结衣| 丰满少妇高潮惨叫久久久| 国产精品久久久久天天影视| 久久综合国产乱子伦精品免费|