Hi. I'm using my application on networks that have proxy, and others that do not.
I'm trying to make a ProxySelector that will use the System proxy setting as default (just pass the select request to the delegate), and if that fails, showing a dialog to configure the proxy for this application instance and retry. I thought that it would be pretty easy just by creating a list on ProxySelector.select that first has the delegate proxy settings and then adding my lazy Proxy implementation that when requested the SocketAdress would query the user (as a last resort). The problem is that the returned connection for the delegate is DIRECT with proxy = Proxy.NO_PROXY and that is handled specially in the SocksSocketImpl class, and does NOT catch the thrown exceptions, unlike all the other Proxies. Any way i can fix this? Alternativelly, any way i can probe for the proxy to change my strategy from fail - query to test once at init - ask proxy if neeed - use proxy if needed? JDK code on protected void connect(SocketAddress endpoint, int timeout) throws IOException of SocksSocketImpl follows. iProxy = sel.select(uri).iterator(); if (iProxy == null || !(iProxy.hasNext())) { super.connect(epoint, timeout); return; } while (iProxy.hasNext()) { p = iProxy.next(); if (p == null || p == Proxy.NO_PROXY) { super.connect(epoint, timeout); <-----------------------EXCEPTION HERE return; } if (p.type() != Proxy.Type.SOCKS) throw new SocketException("Unknown proxy type : " + p.type()); if (!(p.address() instanceof InetSocketAddress)) throw new SocketException("Unknow address type for proxy: " + p); // Use getHostString() to avoid reverse lookups server = ((InetSocketAddress) p.address()).getHostString(); port = ((InetSocketAddress) p.address()).getPort(); // Connects to the SOCKS server try { privilegedConnect(server, port, timeout); // Worked, let's get outta here break; } catch (IOException e) { // Ooops, let's notify the ProxySelector sel.connectFailed(uri,p.address(),e); server = null; port = -1; savedExc = e; // Will continue the while loop and try the next proxy } }