簡體   English   中英

Java NIO SocketChannel IOException:管道損壞

[英]Java NIO SocketChannel IOException: Broken pipe

Stephen C 在這里的答案很好地描述了這個問題。 他說,管道異常斷開是由於某種原因導致連接關閉,而不是應用程序關閉。 我想知道所有這些“東西”通常可能是什么,這導致連接關閉? 還有什么可能的方式來處理它們?

我的使用環境:我在Azure上的一組計算機上運行我的應用程序,所有這些計算機都與其中一台計算機通信。 我幾乎總是會收到此錯誤。

TCP超時可能是原因之一嗎? 如果是,那么如何使套接字通道(影響在它們后面運行的套接字)由於TCP超時而永不關閉?

每當客戶端從正在監聽的套接字移開時,管道異常就會出現。 這可能是由於服務器響應緩慢導致客戶端上的套接字超時所致。 假設在瀏覽器的情況下,如果任何http請求都需要很長時間才能響應,並且用戶關閉瀏覽器,則在應用程序日志中會看到損壞的管道異常。

現在要解決此問題,您可以增加套接字超時或修復服務器響應。

您可以獲取與SocketChannel關聯的套接字,然后設置其keepAlive屬性。 這樣的事情。

SocketChannel sockChannel;
/*
connect here
*/    
sockChannel.socket().setKeepAlive(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM