SO_KEEPALIVE選項和套接字的保活

套接字本身是有一套心跳保活機制的,不過默認的設置並不像我們一廂情願的那樣有效。在雙方TCP套接字建立連接後(即都進入ESTABLISHED狀態)並且在兩個小時左右上層沒有任何數據傳輸的情況下,這套機制纔會被激活。

很多人認爲兩個小時的時間設置得很不合理。爲什麼不設置成爲10分鐘,或者更短的時間?(可以通過SO_KEEPALIVE選項設置。)但是這樣做其實並不被推薦。實際上這套機制只是操作系統底層使用的一個被動機制,原理上不應該被上層應用層使用。當系統關閉一個由KEEPALIVE機制檢查出來的死連接時,是不會主動通知上層應用的,只有在調用相應的IO操作在返回值中檢查出來。

因此,忘記SO_KEEPALIVE,在應用層自己寫一套保活機制比較靠譜。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章