Jonathan Smith created HTTPCLIENT-2032:
------------------------------------------

             Summary: Sometimes get a broken pipe error in Java 11 when trying 
to connect with HttpClient
                 Key: HTTPCLIENT-2032
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2032
             Project: HttpComponents HttpClient
          Issue Type: Bug
          Components: HttpClient (classic)
    Affects Versions: 4.5.10
            Reporter: Jonathan Smith


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.
{code:java}
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
{code}
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?



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to