TCP長連接保持連接狀態(TCP keepalive設置)

轉載:http://blog.csdn.net/embedded_sky/article/details/42077321

對於TCP長連接保活是十分必要的,原因如下:

      1、系統多在OA網和外網間有防火牆隔離,很多防火牆對一段時間內沒有報文活動的socket會自動關閉。

      2、對於非正常斷開的連接系統並不能偵測到,比如防火牆關閉端口、網線被拔掉、電腦突然奔掉、未關閉應用程序直接關機(服務端無法釋放資源)。

     (調用close(fd)爲正常斷開,連接對端可以偵測到)

 

TCP長連接保持的兩種辦法:

 

1) 應用層面的心跳機制

自定義心跳消息頭.,一般客戶端主動發送到服務端,服務器接收後進行迴應(也可以不迴應),以便能夠偵測連接是否異常斷開。

2) TCP協議自帶的保活功能

通過設置TCP keepalive的屬性,打開socket的keepalive屬性,並設置發送底層心跳包的時間間隔。TCP/IP五層網絡模型,我們調用socket等接口是應用層的函數,TCP keepalive是在底層定時發送心跳報文,服務器端接收到底層的心跳報文直接丟棄,不關心其內容。

 

使用TCP keepalive來保持長連接狀態顯然要舒服一些,直接調用系統的API即可實現,對於系統而言負擔也更輕(相對第一種辦法)。

以下是windows下TCP keepalive設置的函數。


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