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

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

Well, because if you ask me, it is only marked as fixed and the behavior was 
changed/corrected by the bugfix, but the original behavior was not restored.

If I recall correctly, the only difference between 11.0.3 and 11.0.2 is that 
while 11.0.2 wraps IOException in javax.net.ssl.SSLProtocolException after the 
bugfix 11.0.3 wraps it in its parent class javax.net.ssl.SSLException. I would 
need to double check the source code change, but I'm pretty sure this was it.

While the 11.0.2 behavior was obviously completely wrong, one can argue about 
the current behavior of 11.0.3+, but it is definitely still incompatible with 
Java 8 and before. Nevertheless with the change there is now an easy way to 
adjust HC to give the end users the same behavior across all Java versions. I 
proposed a small change in a comment on pull request 
[#178|https://github.com/apache/httpcomponents-client/pull/178].

 

> 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