2014-01-10 65 views
0

我們在我們的suse linux服務器上使用了一個客戶端服務器應用程序。
有時會發生這樣的情況,即在客戶端,tcp套接字以某種方式消失,並且服務器端的另一端仍然存在 。想要更改TCP關閉超時時間

在一天結束時,當我們在linux服務器上停止後端時,後端嘗試關閉所有剩餘的tcp連接,也包括那些「殭屍」套接字。

(我用strace看這個)。

當後端嘗試關閉一個tcp連接時,客戶端不再有任何東西,它會向目標發送[FIN,ACK]數據包。當然,沒有什麼會回來的。

後端重複發送此數據包。它第一次只等幾秒鐘重複它,然後,它等待的時間越來越長。最後等待幾秒鐘重複。但是,在15秒後,出現超時,並且繼續結束另一個 tcp連接。

現在,我不知道這15秒超時是從哪裏來的。我想改變它。

非常感謝您提前。

+0

我建議你修復你描述的兩個*錯誤*,而不是可能引入更多的新代碼。 1.套接字不僅「走開」。他們會關閉,或者他們從應用程序泄漏。套接字泄漏是一個主要問題,必須加以解決。 2. TCP應用程序始終可以檢測到對等方的斷開連接,無論哪種方式。如果你的應用程序沒有這樣做,它寫錯了,並且必須修復。 – EJP

回答

1

我想你可能有兩個問題。

  • 您應該檢測到客戶端斷開連接並關閉服務器的套接字末端,以便儘快釋放該資源。您可以爲應用程序層中沒有任何活動的連接自行設置超時。閱讀this
  • 如果你不能在應用層處理這個「殭屍」套接字,你可以改變SO中的超時。閱讀this
相關問題