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; }