В чем разница между java.net.SocketException: сброс подключения и java.net.SocketException: Broken Pipe? - PullRequest
13 голосов
/ 11 января 2011

В чем разница между java.net.SocketException: Connection reset и java.net.SocketException: Broken Pipe?

Я пытаюсь выяснить причины этих двух исключений.Мы получаем следующую ошибку на нашем сервере, который в основном является веб-сервисом на основе мыла.Когда я пытаюсь прервать вызов клиента, я вижу исключение: «Сломанный канал» ...

Ниже приведена трассировка стека, и любая помощь приветствуется!

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)

Ответы [ 4 ]

4 голосов
/ 11 января 2011

«Сброс соединения» может произойти при чтении или записи. «Сломанная труба» может возникать только при записи. Обе они вызваны записью в соединение, которое уже было закрыто другим концом или было сброшено по какой-либо другой причине.

4 голосов
/ 16 апреля 2014

И Connection reset, и Broken 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 предлагает больше причин, связанных с протоколами передачи данных ).

4 голосов
/ 11 января 2011

Это ошибки на уровне протокола TCP.Оба они в основном означают, что другая сторона закрыла TCP-соединение.Разница в том, на какой стадии общения это происходит.

0 голосов
/ 26 июня 2015

Оба, похоже, указывают на одинаковый случай - удаленный сокет больше не доступен для записи.

Недавно в своем эксперименте я обнаружил, что «Сломанный канал» возникает, когда моя подача находится в Unix env, и я завершаю работу клиента.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...