Merge "Fix socket leaks in various android.net.Network methods." into pi-dev

am: f26c5341a5

Change-Id: I2a2254ce65c2176ae0be1d6276034b1bb0cad987
This commit is contained in:
Paul Jensen
2018-03-30 16:22:51 +00:00
committed by android-build-merger

View File

@@ -26,6 +26,8 @@ import android.util.proto.ProtoOutputStream;
import com.android.okhttp.internalandroidapi.Dns;
import com.android.okhttp.internalandroidapi.HttpURLConnectionFactory;
import libcore.io.IoUtils;
import java.io.FileDescriptor;
import java.io.IOException;
import java.net.DatagramSocket;
@@ -142,9 +144,15 @@ public class Network implements Parcelable {
for (int i = 0; i < hostAddresses.length; i++) {
try {
Socket socket = createSocket();
boolean failed = true;
try {
if (localAddress != null) socket.bind(localAddress);
socket.connect(new InetSocketAddress(hostAddresses[i], port));
failed = false;
return socket;
} finally {
if (failed) IoUtils.closeQuietly(socket);
}
} catch (IOException e) {
if (i == (hostAddresses.length - 1)) throw e;
}
@@ -161,15 +169,27 @@ public class Network implements Parcelable {
public Socket createSocket(InetAddress address, int port, InetAddress localAddress,
int localPort) throws IOException {
Socket socket = createSocket();
boolean failed = true;
try {
socket.bind(new InetSocketAddress(localAddress, localPort));
socket.connect(new InetSocketAddress(address, port));
failed = false;
} finally {
if (failed) IoUtils.closeQuietly(socket);
}
return socket;
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
Socket socket = createSocket();
boolean failed = true;
try {
socket.connect(new InetSocketAddress(host, port));
failed = false;
} finally {
if (failed) IoUtils.closeQuietly(socket);
}
return socket;
}
@@ -181,7 +201,13 @@ public class Network implements Parcelable {
@Override
public Socket createSocket() throws IOException {
Socket socket = new Socket();
boolean failed = true;
try {
bindSocket(socket);
failed = false;
} finally {
if (failed) IoUtils.closeQuietly(socket);
}
return socket;
}
}