3 回答

TA貢獻1966條經驗 獲得超4個贊
這是由:
最常見的是,當另一端已經關閉時寫入連接;
通常情況下,對等體關閉連接而不讀取其末尾已經掛起的所有數據。
因此,在這兩種情況下,您的應用程序協議定義都很糟糕。
還有第三個原因,我不會在這里記錄,但涉及對等方采取故意行動重置而不是正確關閉連接。

TA貢獻1856條經驗 獲得超11個贊
SocketException:管道損壞,是由代碼讀取或寫入連接時關閉連接的“另一端”(客戶端或服務器)引起的。
這是客戶端/服務器應用程序中非常常見的例外,它從應用程序控件之外的客戶端或服務器接收流量。例如,客戶端是瀏覽器。如果瀏覽器進行Ajax調用,和/或用戶只是關閉頁面或瀏覽器,那么這可以有效地殺死所有通信?;旧?,只要另一端終止其應用程序,您就會看到此錯誤,并且您沒有預料到它。
如果您在應用程序中遇到此異常,那么這意味著您應檢查發生IO(輸入/輸出)的代碼,并使用try / catch塊將其包裝以捕獲此IOException。然后,由您決定如何處理這種半有效的情況。
在你的情況下,你仍然可以控制的最早的地方就是調用HttpMethodDirector.executeWithRetry
- 所以確保調用是用try / catch塊包裝的,并按照你認為合適的方式處理它。
我強烈建議不要在調試/跟蹤級別以外的任何地方記錄SocketException-Broken Pipe特定錯誤。否則,這可以通過填充日志作為DOS(拒絕服務)攻擊的一種形式。針對這種常見情況,嘗試并強化并對您的應用程序進行負面測試。
添加回答
舉報