2013-05-30 43 views
1

如果TCP客戶端與TCP服務器建立TCP連接。然後,TCP客戶端從不向服務器發送任何數據包。如何在linux C中保持非活動的TCP連接?

首先,我大概知道TCP服務器附近的防火牆可能會向它發送一個RST。或者存在強制TCP連接結束的保持活動超時。但我不確切知道會發生什麼?任何人都可以解釋一下嗎?

其次,除非我想要結束這個TCP連接嗎?

我只希望TCP服務器可以在TCP堆棧上保留這個TCP連接。但我不想讓TCP客戶端參與,我不希望客戶端發送KEEP-ALIVE消息。我不想要任何其他第三方實體參與。我不在乎TCP客戶端是否丟失了連接。我只希望當我編寫TCP服務器的源代碼時,源代碼可以管理維護服務器上的TCP連接。

注意:我的編程語言是LINUX C

謝謝!

+1

這是TCP的奇怪用法。爲什麼要在服務器上連接,而不關心客戶端是否斷開連接?或者我錯過了什麼? –

+0

是的,這很奇怪。我正在做一項研究工作,我想分割TCP。 – misteryes

+0

所以你想讓你的服務器保持TCP連接,即使客戶端退出?拿起剪刀剪斷電纜。否則,來自死亡客戶端的'FIN'或來自中間設備的'RST'無法流動,將會導致您的研究失敗。 –

回答

0

如果你在你的端啓用keepalive,它會發送定期探測,如果他們沒有回答,你的結束會重置連接。 Keepalive在默認情況下處於關閉狀態,因此如果您在結束時未啓用Keepalive,則不會從您的結尾發生。

然而,同伴仍然可以在他的末端啓用它,在這種情況下,他的結局將如上所述,並且您既不能阻止也不能檢測到它。

問題的其餘部分沒有意義。由於多種原因,客戶端或防火牆可以隨時發送RST。你不能阻止這種情況,並且你不能在代碼中忽略它。如果出於任何原因在任何地方有連接重置,則沒有連接要維護。

如果你不想要TCP,請使用別的東西。

+0

如果我不啓用tcp服務器上的keepalive,會發生什麼? – misteryes

+0

如果啓用Keepalive,Keepalive探針是否包含序列號並檢查序列號? – misteryes

+0

如果您不在服務器上啓用keepalive,它將不會發送探針,因此它不會發送響應,所以它不會在不存在的情況下重置連接。這是我的回答中已經陳述的邏輯結果。保活探測由已收到序列號的ACK組成。 – EJP