2016-02-18 43 views
0

我寫了一個客戶端,使用C中的普通套接字連接到遠程機器以維護持久連接以接收推送消息。一切都很好。爲了使它持久化,我設置了Keepalive並在循環中等待recv()函數。C++ Socket Recv()和網絡接口正在關閉

問題是,當網絡接口關閉時,recv()不會返回。正如我從socket文檔中所理解的那樣,peer必須斷開recv()才能返回。網絡接口關閉不同於對等連接斷開。

這裏需要的是,如果網絡接口出現故障,我需要安排重新連接,以便通道建立。

對此有任何想法嗎?

+1

可能的重複[如何正確確定我的客戶端是否仍連接到具有C套接字的服務器?](http://stackoverflow.com/questions/16113539/how-do-i-properly-determine-if -my-client-is-still-connected-to-the-server-with-c) – SSC

回答

0

使用任何您希望強制接收操作超時的機制。根據用例的具體情況,如果發生超時,您可能希望斷開連接,或者您可能希望發送一些內容來檢查連接的狀態。

無論你在TCP上使用什麼協議都應該被記錄下來,文檔應該指定如何檢測到斷開連接。您必須發送以檢測連接丟失,因此設計爲在TCP之上運行的每個協議都應該考慮到這一點。

+0

Keepalive是否爲此目的而檢測到「接口不良」。我想不是。你能確認嗎? –

+0

@SenthilAcs他們將通過任何方式檢測連接丟失,否則無法檢測到。這包括Windows以外的平臺上的界面。 –