[
https://issues.apache.org/jira/browse/HTTPCLIENT-2032?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16985212#comment-16985212
]
Eric Hubert commented on HTTPCLIENT-2032:
-----------------------------------------
{quote}
That's pretty annoying https://stackoverflow.com/q/56306216/696632.
Eric Hubert, have you inquired with security-dev? That is pretty annoying. We
may need to apply the logic from SO answer.
{quote}
No, I didn't. When we faced this problem end of last year, we implemented
something very close to the SO answer, but it also might be OK, to just mark
the three subclasses as non-retriable, and only retry the base class
javax.net.ssl.SSLException, which effectively only seems to be used for IO
related issues on an SSLSocket, whereas the concrete subclasses typically
reflect non-recoverable error states. But either way, it would be great if HC's
default implementation would handle those retries also for Java >= 11,
similarily as done for earlier Java versions to avoid this annoying surprise.
> 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]