diff options
Diffstat (limited to 'src/org/apache/http/impl')
-rw-r--r-- | src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java b/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java index 41488e1..0fc1725 100644 --- a/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java +++ b/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java @@ -44,6 +44,7 @@ import org.apache.http.protocol.HttpContext; import org.apache.http.conn.HttpHostConnectException; import org.apache.http.conn.OperatedClientConnection; import org.apache.http.conn.ClientConnectionOperator; +import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.scheme.LayeredSocketFactory; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; @@ -121,19 +122,33 @@ public class DefaultClientConnectionOperator final Scheme schm = schemeRegistry.getScheme(target.getSchemeName()); final SocketFactory sf = schm.getSocketFactory(); - - Socket sock = sf.createSocket(); - conn.opening(sock, target); - - try { - sock = sf.connectSocket(sock, target.getHostName(), - schm.resolvePort(target.getPort()), - local, 0, params); - } catch (ConnectException ex) { - throw new HttpHostConnectException(target, ex); + InetAddress[] addresses = InetAddress.getAllByName(target.getHostName()); + + for (int i = 0; i < addresses.length; ++i) { + Socket sock = sf.createSocket(); + conn.opening(sock, target); + + try { + Socket connsock = sf.connectSocket(sock, addresses[i].getHostAddress(), + schm.resolvePort(target.getPort()), + local, 0, params); + if (sock != connsock) { + sock = connsock; + conn.opening(sock, target); + } + prepareSocket(sock, context, params); + conn.openCompleted(sf.isSecure(sock), params); + break; + } catch (ConnectException ex) { + if (i == addresses.length - 1) { + throw new HttpHostConnectException(target, ex); + } + } catch (ConnectTimeoutException ex) { + if (i == addresses.length - 1) { + throw ex; + } + } } - prepareSocket(sock, context, params); - conn.openCompleted(sf.isSecure(sock), params); } // openConnection @@ -213,4 +228,3 @@ public class DefaultClientConnectionOperator } // class DefaultClientConnectionOperator - |