[
https://issues.apache.org/jira/browse/HTTPCLIENT-875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12787749#action_12787749
]
Glyn Davies commented on HTTPCLIENT-875:
----------------------------------------
This doesn't fix all cases as the call to conn.update() checks that the
previous socket is still open, by calling assertOpen()
If the original socket is screwed up (likely given the use case) this throws an
'IllegalStateEXception: Connection is not open'
> DefaultClientConnectionOperator doesn't update socket after call to
> connectSocket(...)
> --------------------------------------------------------------------------------------
>
> Key: HTTPCLIENT-875
> URL: https://issues.apache.org/jira/browse/HTTPCLIENT-875
> Project: HttpComponents HttpClient
> Issue Type: Bug
> Components: HttpClient
> Affects Versions: 4.0 Beta 2, 4.0 Final
> Reporter: Connell Gauld
> Fix For: 4.1 Alpha1
>
> Attachments: HTTPCLIENT-875-2.patch, HTTPCLIENT-875.diff
>
>
> In the DefaultClientConnectionOperator function openConnection(...) it calls
> SocketFactory.connectSocket(...). The documentation for connectSocket(...)
> says that it returns:
> "the connected socket. The returned object may be different from
> the sock argument if this factory supports a layered protocol. "
> A quick peek at the source showed:
> In org.apache.http.impl.conn.DefaultClientConnectionOperator:
> 117 final SocketFactory sf = schm.getSocketFactory();
> 118
> 119 Socket sock = sf.createSocket();
> 120 conn.opening(sock, target);
> 121
> 122 try {
> 123 sock = sf.connectSocket(sock, target.getHostName(),
> 124 schm.resolvePort(target.getPort()),
> 125 local, 0, params);
> 126 } catch (ConnectException ex) {
> 127 throw new HttpHostConnectException(target, ex);
> 128 }
> 129 prepareSocket(sock, context, params);
> 130 conn.openCompleted(sf.isSecure(sock), params);
> So DefaultClientConnectionOperator never updates conn with the new version of
> sock that may have been returned from connectSocket(...).
> adding:
> 130 conn.openCompleted(sf.isSecure(sock), params);
> +++ 131 conn.update(sock, target, sf.isSecure(sock), params);
> appears to fix the issue.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]