Uploaded image for project: 'HttpComponents HttpClient'
  1. HttpComponents HttpClient
  2. HTTPCLIENT-2032

Sometimes get a broken pipe error in Java 11 when trying to connect with HttpClient

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Not A Bug
    • 4.5.10
    • None
    • HttpClient (classic)
    • None

    Description

      Connecting with httpclient expecting to get a handshake and/or certificate error but sometimes get a broken pipe error (and sometimes I get the desired handshake / certificate error).

      It works perfectly fine in Java 8.

      javax.net.ssl.SSLException: Broken pipe (Write failed)	at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:127)
      	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:320)
      	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:263)
      	at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:258)
      	at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:988)
      	at org.apache.http.impl.io.SessionOutputBufferImpl.streamWrite(SessionOutputBufferImpl.java:124)
      	at org.apache.http.impl.io.SessionOutputBufferImpl.flushBuffer(SessionOutputBufferImpl.java:136)
      	at org.apache.http.impl.io.SessionOutputBufferImpl.flush(SessionOutputBufferImpl.java:144)
      	at org.apache.http.impl.BHttpConnectionBase.doFlush(BHttpConnectionBase.java:174)
      	at org.apache.http.impl.DefaultBHttpClientConnection.flush(DefaultBHttpClientConnection.java:183)
      	at org.apache.http.impl.conn.CPoolProxy.flush(CPoolProxy.java:167)
      	at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:241)
      	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)
      	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
      	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
      	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
      	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
      	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
      	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
      	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:221)
      	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:165)
      	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:140)Caused by: java.net.SocketException: Broken pipe (Write failed)
      	at java.base/java.net.SocketOutputStream.socketWrite0(Native Method)
      	at java.base/java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:110)
      	at java.base/java.net.SocketOutputStream.write(SocketOutputStream.java:150)
      	at java.base/sun.security.ssl.SSLSocketOutputRecord.deliver(SSLSocketOutputRecord.java:319)
      	at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:983)
      	... 36 more
      

      As you can see, the SessionOutputBufferImpl tries to flush but hits the broken pipe. Could it be that the socket has already flushed itself sometimes and thus resulting in the connection/socket being closed before the explicit flush is called?

      Attachments

        Activity

          People

            Unassigned Unassigned
            CoderJon Jonathan Smith
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: