1. 程式人生 > >socket網路程式設計中常用的SO_KEEPALIVE套接字選項

socket網路程式設計中常用的SO_KEEPALIVE套接字選項

使用getsocketopt( )可以得到當前套接字的選項內容
使用setsocketopt( )函式設定應用程式需要使用的套接字選項


SO_KEEPALIVE選項:
    設定了這個選項後,如果TCP連線2小時內在任一方向都沒有資料交換,那麼TCP自動傳送一個keep-alive probe(分節),這個分節對端必須迴應,會出現三種情況:
    1)對端返回ACK,說明連線正常,應用程序不會得到任何通知,因為連線本身是正常的;
    2)對端返回RST,說明對端崩潰或者重啟了,此時本端關閉套接字,socket待處理錯誤置為ECONNRESET;
    3)對端無任何反應,重試後(重試的實現,各個*nix系統實現不同)仍無迴應的,關閉套接字,socket待處
理錯誤置為ETIMEOUT;

    4)某次重試收到了ICMP錯誤報文,關閉套接字,並設定相應的錯誤。

    一般這個選項用在服務端,客戶端也可以使用。伺服器程式使用這個選項可以處理“半開連線”問題(client崩潰或者異常退出,而伺服器沒有得到任何通知,仍然保持連線的問題)。同時,應用程序可以自己實現分鐘級別的超時處理,用來更及時的處理半開連線問題,這個超時處理跟SO_KEEPALIBE套接字選項無關。