Merge "Fix socket leaks in various android.net.Network methods."
am: 34ce11f2bd Change-Id: I1a59fced1f3bcd19bd48150ca215093dff431619
This commit is contained in:
@@ -25,6 +25,8 @@ import android.system.OsConstants;
|
||||
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;
|
||||
@@ -136,9 +138,15 @@ public class Network implements Parcelable {
|
||||
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 socket;
|
||||
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;
|
||||
}
|
||||
@@ -155,15 +163,27 @@ public class Network implements Parcelable {
|
||||
public Socket createSocket(InetAddress address, int port, InetAddress localAddress,
|
||||
int localPort) throws IOException {
|
||||
Socket socket = createSocket();
|
||||
socket.bind(new InetSocketAddress(localAddress, localPort));
|
||||
socket.connect(new InetSocketAddress(address, port));
|
||||
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();
|
||||
socket.connect(new InetSocketAddress(host, port));
|
||||
boolean failed = true;
|
||||
try {
|
||||
socket.connect(new InetSocketAddress(host, port));
|
||||
failed = false;
|
||||
} finally {
|
||||
if (failed) IoUtils.closeQuietly(socket);
|
||||
}
|
||||
return socket;
|
||||
}
|
||||
|
||||
@@ -175,7 +195,13 @@ public class Network implements Parcelable {
|
||||
@Override
|
||||
public Socket createSocket() throws IOException {
|
||||
Socket socket = new Socket();
|
||||
bindSocket(socket);
|
||||
boolean failed = true;
|
||||
try {
|
||||
bindSocket(socket);
|
||||
failed = false;
|
||||
} finally {
|
||||
if (failed) IoUtils.closeQuietly(socket);
|
||||
}
|
||||
return socket;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user