• <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>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            Socket與拔掉網線

            Posted on 2009-06-15 18:40 Prayer 閱讀(1147) 評論(0)  編輯 收藏 引用 所屬分類: SOCKET
            當客戶端與服務端通過Tcp Socket進行通信時,如果客戶端應用正常退出或異常退出,服務端都會在對應的連接上獲取感知(如返回0、或拋出異常)。但是,如果客戶端的網線被拔掉,那么,默認情況下,服務端需要在2個小時后才會感知客戶端掉線。對于很多服務端應用程序來說,這么長的反應時間是不能忍受的。
               我們通常在應用層使用“心跳機制”來解決類似的問題,這是可行的。
               然而,在這里,我們可以使用Socket自己的心跳機制來解決這一問題。 System.Net.Sockets.Socket提供了IOControl()方法給我們來設置Sokect的心跳機制的相關參數。比如,我們設置KeepAlive的時間為20秒,檢查間隔為2秒。可以這樣做:
                        int keepAlive = -1744830460// SIO_KEEPALIVE_VALS
                        byte[] inValue = new byte[] { 10000x200x4e000xd00x0700 }; //True, 20 秒, 2 秒
                        sock.IOControl(keepAlive, inValue, null);
               20秒(20000毫秒)的16進制表示是4e20,2秒(2000毫秒)的16進制表示是07d0,如此,你可以修改inValue參數為自己希望的值。
               在上述設置下,如果撥掉客戶端網線,服務器Socket.Receive()會在20秒后拋出異常。
            精品人妻伦一二三区久久| 一本久道久久综合狠狠躁AV| 18岁日韩内射颜射午夜久久成人| 无码国内精品久久综合88 | 久久精品国产亚洲av瑜伽| 一本色道久久88综合日韩精品| 亚洲成av人片不卡无码久久| 久久99国产精品一区二区| 欧美久久久久久精选9999| 人妻少妇久久中文字幕一区二区| 国内精品久久久久久久涩爱| 东方aⅴ免费观看久久av| 精品久久久久久国产潘金莲| 色8激情欧美成人久久综合电| 久久综合九色综合网站| 狠狠人妻久久久久久综合蜜桃| 久久久久亚洲AV成人片| 久久天天躁狠狠躁夜夜avapp| 99久久无码一区人妻| 久久最新精品国产| 精品国产乱码久久久久久浪潮| 看久久久久久a级毛片| 青草久久久国产线免观| 欧美精品一本久久男人的天堂| 国产69精品久久久久9999APGF| 亚洲精品WWW久久久久久| 亚洲国产成人久久综合一| 丰满少妇人妻久久久久久| 99蜜桃臀久久久欧美精品网站| 久久伊人精品青青草原日本| 亚洲国产精品久久久久婷婷老年| 国产精品久久久久无码av| 狠狠色丁香久久综合婷婷| 亚洲AV无码久久精品狠狠爱浪潮| 久久精品国产男包| 久久精品亚洲日本波多野结衣| 久久国产劲爆AV内射—百度| 久久成人小视频| 久久久久亚洲AV无码麻豆| 99久久99久久精品免费看蜜桃| 国产V亚洲V天堂无码久久久|