|
import java.lang.reflect.Field;
|
import java.net.HttpURLConnection;
|
import java.net.Socket;
|
|
public class NetUtils
|
{
|
|
public NetUtils()
|
{
|
}
|
|
public static boolean setSocketTimeout(HttpURLConnection conn, int millis)
|
{
|
if(!initialized && !initialize())
|
return false;
|
try
|
{
|
Object httpClient = httpClientField.get(conn);
|
Socket serverSocket = (Socket)serverSocketField.get(httpClient);
|
serverSocket.setSoTimeout(millis);
|
return true;
|
}
|
catch(Exception e)
|
{
|
return false;
|
}
|
}
|
|
private static boolean initialize()
|
{
|
try
|
{
|
Class c = sun.net.www.protocol.http.HttpURLConnection.class;
|
httpClientField = c.getDeclaredField("http");
|
httpClientField.setAccessible(true);
|
c = sun.net.NetworkClient.class;
|
serverSocketField = c.getDeclaredField("serverSocket");
|
serverSocketField.setAccessible(true);
|
initialized = true;
|
return true;
|
}
|
catch(Exception e)
|
{
|
return false;
|
}
|
}
|
|
private static volatile boolean initialized;
|
private static Field httpClientField;
|
private static Field serverSocketField;
|
}
|