[
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]