[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2032?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16985152#comment-16985152
 ] 

Eric Hubert commented on HTTPCLIENT-2032:
-----------------------------------------

[~CoderJon] Did you check whether there are automatic request retries using 
Java 8? The retry handling of HttpClient regarding SocketException changes with 
new Java versions, because SocketExceptions are wrapped in SSLExceptions which 
are not retried. With Java8 same exception arrive unwrapped as SocketException 
and will get retried by default. At least I noticed a similar problems just 
after updating the Java version. If this is the case, you can easily use a 
custom retry implementation based on the default one.

> 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
>            Priority: Major
>
> 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