summaryrefslogtreecommitdiffstats
path: root/src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java')
-rw-r--r--src/org/apache/http/impl/conn/DefaultClientConnectionOperator.java40
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
-