2011-01-10 139 views
12

java.net.SocketException:Connection reset和java.net.SocketException:Broken Pipe有什麼區別?java.net.SocketException:Connection reset和java.net.SocketException:Broken Pipe之間的區別是什麼?

我想弄清楚這兩個例外的原因是什麼。我們的服務器出現以下錯誤,這基本上是基於soap的web服務。當我嘗試中止客戶端通話時,我看到的異常是破管...

以下是堆棧跟蹤我們,任何幫助表示讚賞!

2011-01-10 00:44:33,828 96893947 INFO [STDOUT] (http-0.0.0.0-8180-Processor25:) ERROR: '' 
2011-01-10 00:44:33,829 96893948 INFO [STDOUT] (http-0.0.0.0-8180-Processor25:) Jan 10, 2011 12:44:33 AM com.sun.xml.rpc.server.http.JAXRPCS 
ervletDelegate doGetDefault 
SEVERE: JAXRPCSERVLET34: transformation failed : ClientAbortException: java.net.SocketException: Connection reset 
JAXRPCSERVLET34: transformation failed : ClientAbortException: java.net.SocketException: Connection reset 
     at com.sun.xml.rpc.server.http.WSDLPublisher.handle(WSDLPublisher.java:109) 
     at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGetDefault(JAXRPCServletDelegate.java:185) 
     at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGet(JAXRPCServletDelegate.java:153) 
     at com.sun.xml.rpc.server.http.JAXRPCServlet.doGet(JAXRPCServlet.java:111) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:697) 
-- 
     at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) 
     at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) 
     at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) 
     at java.lang.Thread.run(Thread.java:595) 
2011-01-10 00:44:33,829 96893948 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/soa].[UserService]] (http-0.0.0.0-81 
80-Processor25:) Servlet.service() for servlet UserService threw exception 
javax.servlet.ServletException: JAXRPCSERVLET34: transformation failed : ClientAbortException: java.net.SocketException: Connection reset 
     at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGetDefault(JAXRPCServletDelegate.java:347) 
     at com.sun.xml.rpc.server.http.JAXRPCServletDelegate.doGet(JAXRPCServletDelegate.java:153) 
     at com.sun.xml.rpc.server.http.JAXRPCServlet.doGet(JAXRPCServlet.java:111) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:697) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) 
+0

http://stackoverflow.com/questions/62929/java-net-socketexception-connection-reset – 2011-01-11 00:36:00

回答

4

這些是TCP協議級別的錯誤條件。他們兩個基本上都意味着對方關閉了TCP連接。不同之處在於發生的交流階段。

+2

有趣回答,但你能否詳細說明這一點? – vandershraaf 2011-10-04 14:22:30

+0

@vandershraaf:我對這些細節並不十分了解,無論如何也不太可能是相關的。 – 2011-10-04 15:15:43

4

讀或寫時可能發生「連接復位」。 '破管'只能在書寫時發生。這兩者都是由於寫入已由另一端關閉的連接或由於其他原因而被重置的連接造成的。

4

Connection resetBroken pipe都出現在對等方關閉連接(即應用程序在另一端持有連接)的情況下。

Connection reset可能會在寫入時發生(請參閱java.net.SocketOutputStream)或讀取(請參閱java.net.SocketInputStream)。

Broken pipe發生在java.net.SocketException一個本機方法:

java.net.SocketException: Broken pipe 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) 

因此,Broken pipe發生在一個較低的通信級別,作爲邁克爾博格瓦特建議。

在大多數情況下,當向客戶端瀏覽器發送大型PDF時,我看到此錯誤,並且用戶在獲取整個文檔之前殺死瀏覽器(在這種情況下,我忽略錯誤,因爲這是用戶選擇關閉它的瀏覽器並沒有什麼可以糾正的)。但可能是其他原因(例如EJP suggests more reason related to data communication protocols)。

0

兩者都似乎指向類似的情況 - 遠程套接字不再可用於寫入。

最近在我的實驗中,我發現當我的服務器在Unix env上並且我終止了客戶端時,發生Broken pipe。

015-06-26 10:53:51,028-0400 [ERROR][WS-ASync] (Handler.java:1168) Exception while writing ClientAbortException: java.net.SocketException: Broken pipe 
ClientAbortException: java.net.SocketException: Broken pipe 
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:413) 
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:371) 
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:438) 

然而,當服務器運行在Windows上,我看到連接復位異常

2015-06-26 09:11:31,491 ERROR [WS-ASync] (Handler.java:1168) - Exception while writing ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error 
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error 
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:388) 
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:462) 
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366) 
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:413) 
     at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366) 
相關問題