Loading core/java/android/net/Network.java +12 −13 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.MalformedURLException; import java.net.Socket; import java.net.SocketAddress; import java.net.SocketException; import java.net.UnknownHostException; import java.net.URL; Loading Loading @@ -106,27 +107,27 @@ public class Network implements Parcelable { mNetId = netId; } private void connectToHost(Socket socket, String host, int port) throws IOException { private Socket connectToHost(String host, int port, SocketAddress localAddress) throws IOException { // Lookup addresses only on this Network. InetAddress[] hostAddresses = getAllByName(host); // Try all but last address ignoring exceptions. for (int i = 0; i < hostAddresses.length - 1; i++) { // Try all addresses. for (int i = 0; i < hostAddresses.length; i++) { try { Socket socket = createSocket(); if (localAddress != null) socket.bind(localAddress); socket.connect(new InetSocketAddress(hostAddresses[i], port)); return; return socket; } catch (IOException e) { if (i == (hostAddresses.length - 1)) throw e; } } // Try last address. Do throw exceptions. socket.connect(new InetSocketAddress(hostAddresses[hostAddresses.length - 1], port)); throw new UnknownHostException(host); } @Override public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException { Socket socket = createSocket(); socket.bind(new InetSocketAddress(localHost, localPort)); connectToHost(socket, host, port); return socket; return connectToHost(host, port, new InetSocketAddress(localHost, localPort)); } @Override Loading @@ -147,9 +148,7 @@ public class Network implements Parcelable { @Override public Socket createSocket(String host, int port) throws IOException { Socket socket = createSocket(); connectToHost(socket, host, port); return socket; return connectToHost(host, port, null); } @Override Loading services/core/java/com/android/server/connectivity/NetworkMonitor.java +3 −2 Original line number Diff line number Diff line Loading @@ -630,12 +630,13 @@ public class NetworkMonitor extends StateMachine { urlConnection.getInputStream(); httpResponseCode = urlConnection.getResponseCode(); } else { socket = mNetworkAgentInfo.network.getSocketFactory().createSocket(); socket.setSoTimeout(SOCKET_TIMEOUT_MS); // Lookup addresses only on this Network. InetAddress[] hostAddresses = mNetworkAgentInfo.network.getAllByName(url.getHost()); // Try all addresses. for (int i = 0; i < hostAddresses.length; i++) { // Create a new socket for every IP address. See http://b/16664129 . socket = mNetworkAgentInfo.network.getSocketFactory().createSocket(); socket.setSoTimeout(SOCKET_TIMEOUT_MS); if (DBG) log("Connecting to " + hostAddresses[i]); try { socket.connect(new InetSocketAddress(hostAddresses[i], Loading Loading
core/java/android/net/Network.java +12 −13 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.MalformedURLException; import java.net.Socket; import java.net.SocketAddress; import java.net.SocketException; import java.net.UnknownHostException; import java.net.URL; Loading Loading @@ -106,27 +107,27 @@ public class Network implements Parcelable { mNetId = netId; } private void connectToHost(Socket socket, String host, int port) throws IOException { private Socket connectToHost(String host, int port, SocketAddress localAddress) throws IOException { // Lookup addresses only on this Network. InetAddress[] hostAddresses = getAllByName(host); // Try all but last address ignoring exceptions. for (int i = 0; i < hostAddresses.length - 1; i++) { // Try all addresses. for (int i = 0; i < hostAddresses.length; i++) { try { Socket socket = createSocket(); if (localAddress != null) socket.bind(localAddress); socket.connect(new InetSocketAddress(hostAddresses[i], port)); return; return socket; } catch (IOException e) { if (i == (hostAddresses.length - 1)) throw e; } } // Try last address. Do throw exceptions. socket.connect(new InetSocketAddress(hostAddresses[hostAddresses.length - 1], port)); throw new UnknownHostException(host); } @Override public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException { Socket socket = createSocket(); socket.bind(new InetSocketAddress(localHost, localPort)); connectToHost(socket, host, port); return socket; return connectToHost(host, port, new InetSocketAddress(localHost, localPort)); } @Override Loading @@ -147,9 +148,7 @@ public class Network implements Parcelable { @Override public Socket createSocket(String host, int port) throws IOException { Socket socket = createSocket(); connectToHost(socket, host, port); return socket; return connectToHost(host, port, null); } @Override Loading
services/core/java/com/android/server/connectivity/NetworkMonitor.java +3 −2 Original line number Diff line number Diff line Loading @@ -630,12 +630,13 @@ public class NetworkMonitor extends StateMachine { urlConnection.getInputStream(); httpResponseCode = urlConnection.getResponseCode(); } else { socket = mNetworkAgentInfo.network.getSocketFactory().createSocket(); socket.setSoTimeout(SOCKET_TIMEOUT_MS); // Lookup addresses only on this Network. InetAddress[] hostAddresses = mNetworkAgentInfo.network.getAllByName(url.getHost()); // Try all addresses. for (int i = 0; i < hostAddresses.length; i++) { // Create a new socket for every IP address. See http://b/16664129 . socket = mNetworkAgentInfo.network.getSocketFactory().createSocket(); socket.setSoTimeout(SOCKET_TIMEOUT_MS); if (DBG) log("Connecting to " + hostAddresses[i]); try { socket.connect(new InetSocketAddress(hostAddresses[i], Loading