2010-05-14 42 views
3

假設我編寫了一個使用Socket類(TCP)連接到服務器的應用程序。如果在讀取或寫入時遇到SocketException,那麼顯然我必須繼續並運行斷開例程以將應用程序的狀態更改爲斷開連接。在某些情況下吞食SocketExceptions可以嗎?

但是如果我已經開始斷開連接,並且在清理時發生了SocketException,那該怎麼辦呢?

SocketException對我來說並不意味着什麼,因爲無論如何我都會自己關閉套接字。所以可以吞嚥它嗎?

我真的很想知道這種情況的最佳做法是什麼。

+0

比方說,我即將關閉套接字,但其中一個讀取/發送調用將獲得一個「異常連接重置」的SocketException或類似的東西。我吞下它嗎? – NoPyGod 2010-05-14 09:01:27

+0

還是要看。如果你只是寫一個「再見......」,沒有什麼可擔心的。但是如果你發送了一些必要的東西,一個例外是一個錯誤。 – 2010-05-21 05:54:33

回答

0

我一直忽略套接字例外,都使用.net套接字和WCF。我發送呼叫的時間有一半是異步發送的,所以如果發生斷開連接,直到超時命中爲止,我才發現它,在這段時間,我得到了一個我忽略的超時異常。

0

如果斷開連接時出現問題,那麼套接字將處於什麼狀態?在最壞的情況下,遠程套接字將超時。確實沒有任何事情可以解決這種情況。

但是,正如Joe R所說,記錄消息 - 這些異常也可能發生,因爲Disconnect()被調用了兩次,這是你想知道的。 (編輯:不知道這是否會導致例外,但我希望你知道我的意思:P)

2

有些情況下,例外是'正常'的情況。如果我沒有記錯,在某些協議(SMTP)中,客戶端可以在準備就緒時斷開連接,但不發送正確的關閉命令。在服務器端,你總會得到一個已知無害的異常。

但請確保您只丟棄特定位置的特定異常類型。

1

你仍然需要吞下一些,特別是當你設計一個重試機制時。對?如果你沒有吞下第一次失敗,你如何初始化第二次嘗試?

相關問題