2011-12-02 128 views
2

這是一個真正開放的問題,在這裏「如何確保或保持套接字活着?」如何確保或保持套接字活着?

恐怕我不得不對這個未解決的問題說「抱歉」。但我仍然想問一些想法。

如何爲應用程序提供端到端的解決方案,使應用程序知道兩端的資源有限?

任何解決方案或建議,這裏很好的讚賞。

+1

對於TCP套接字,我們可以設置保活到真正的,我們可以調整操作系統的保持活動時間間隔。 –

+0

@Wince John Wesley:是的,tcp socket有這個功能。但是,實時丟失連接時無法報告錯誤,請參閱http://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85).aspx請查找SO_KEEPALIVE部分。 – Daniel

+1

您不知道連接丟失的原因是因爲您的計算機沒有被告知。任何中間路由器可能會隨時停止轉發數據包,無論是否通知。 'SO_KEEPALIVE'主要幫助具有狀態防火牆的路由器(這將是路由器停止轉發的原因)。通過Keepalive,您的應用通常會在Keepalive未在超時時間內回覆時得到通知,這是最好的可以實現的。 –

回答

1

我假設你的意思是一個TCP套接字。

您無法保證它在任何特定時間都處於活動狀態。如果啓用SO_KEEPALIVE不能滿足您的需求,則需要在應用程序協議中執行自定義Keepalive數據包。

對於isntance,一些協議有一個可以使用的「NOOP」命令。

在Linux下(但不一定是其他操作系統),您可以修改在每個套接字使用SO_KEEPALIVE的存活時間間隔(見男子7 TCP)

+0

非常好,你提到關於「NOOP」。那麼,這就像心跳檢測機制。是的,它在應用程序方面。也許我們必須在會話層中實現這種機制。但是你知道,聽到節拍的時間會消耗資源,這取決於檢查的時間間隔。 – Daniel