On Thu, 2010-06-24 at 05:42 -0700, Ken Krugler wrote:
> On Jun 23, 2010, at 8:24pm, ctg3 wrote:
> 
> >
> > I am having an issue with HttpClient 4.01. When I try to access
> > www.google.com or any other website I get a "java.net.SocketException:
> > Permission denied: connect". There is no firewall or other software  
> > blocking
> > Java and there are no proxies involved.
> 
> I'm assuming you've tried the same thing, and run into the same  
> problem, without your custom keep-alive and retry handlers, yes?
> 
> -- Ken
> 

It is all very simple. The application does not have permissions to open
outgoing connections. This problem has nothing to do with HttpClient.
This looks like an OS level permission issue. 

Oleg 


> 
> 
> > Here is the stack trace:
> >
> > 2010-06-23 21:42:57,803 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager -
> > ThreadSafeClientConnManager.getConnection:
> > HttpRoute[{}->http://www.google.com], timeout = 15000
> > 2010-06-23 21:42:57,806 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Total connections  
> > kept
> > alive: 0
> > 2010-06-23 21:42:57,807 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Total issued  
> > connections:
> > 0
> > 2010-06-23 21:42:57,808 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Total allocated
> > connection: 0 out of 5
> > 2010-06-23 21:42:57,810 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ConnPoolByRoute - No free connections
> > [HttpRoute[{}->http://www.google.com]][null]
> > 2010-06-23 21:42:57,810 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Available  
> > capacity: 2 out
> > of 2 [HttpRoute[{}->http://www.google.com]][null]
> > 2010-06-23 21:42:57,811 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Creating new  
> > connection
> > [HttpRoute[{}->http://www.google.com]]
> > 2010-06-23 21:42:58,126 [main] DEBUG
> > org.apache.http.impl.conn.DefaultClientConnection - Connection shut  
> > down
> > 2010-06-23 21:42:58,127 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager - Released
> > connection is not reusable.
> > 2010-06-23 21:42:58,128 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Releasing connection
> > [HttpRoute[{}->http://www.google.com]][null]
> > 2010-06-23 21:42:58,128 [main] DEBUG
> > org.apache.http.impl.conn.tsccm.ConnPoolByRoute - Notifying no-one,  
> > there
> > are no waiting threads
> > java.net.SocketException: Permission denied: connect
> >     at java.net.PlainSocketImpl.socketConnect(Native Method)
> >     at java.net.PlainSocketImpl.doConnect(Unknown Source)
> >     at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
> >     at java.net.PlainSocketImpl.connect(Unknown Source)
> >     at java.net.SocksSocketImpl.connect(Unknown Source)
> >     at java.net.Socket.connect(Unknown Source)
> >     at
> > org 
> > .apache 
> > .http 
> > .conn 
> > .scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:123)
> >     at
> > org 
> > .apache 
> > .http 
> > .impl 
> > .conn 
> > .DefaultClientConnectionOperator 
> > .openConnection(DefaultClientConnectionOperator.java:123)
> >     at
> > org 
> > .apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java: 
> > 147)
> >     at
> > org 
> > .apache 
> > .http 
> > .impl 
> > .conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java: 
> > 108)
> >     at
> > org 
> > .apache 
> > .http 
> > .impl 
> > .client.DefaultRequestDirector.execute(DefaultRequestDirector.java: 
> > 415)
> >     at
> > org 
> > .apache 
> > .http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java: 
> > 641)
> >     at
> > org 
> > .apache 
> > .http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java: 
> > 576)
> >     at
> > org 
> > .apache 
> > .http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java: 
> > 554)
> >
> > Here is my HttpClient code:
> >
> >       HttpParams params = new BasicHttpParams();
> >        ConnManagerParams.setMaxTotalConnections(params, 5);
> >        ConnManagerParams.setTimeout(params, 15 * 1000);
> >        HttpConnectionParams.setStaleCheckingEnabled(params, true);
> >        HttpConnectionParams.setConnectionTimeout(params, 15 * 1000);
> >        HttpConnectionParams.setSoTimeout(params, 20 * 1000);
> >        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
> >
> >        // Create and initialize scheme registry
> >        SchemeRegistry schemeRegistry = new SchemeRegistry();
> >        schemeRegistry.register(new Scheme("http",
> > PlainSocketFactory.getSocketFactory(), 80));
> >        schemeRegistry.register(new Scheme("https",
> > SSLSocketFactory.getSocketFactory(), 443));
> >
> >        // Create an HttpClient with the ThreadSafeClientConnManager.
> >        // This connection manager must be used if more than one  
> > thread will
> >        // be using the HttpClient.
> >        ClientConnectionManager cm = new  
> > ThreadSafeClientConnManager(params,
> > schemeRegistry);
> >
> >        httpclient = new DefaultHttpClient(cm, params);
> >
> >        httpclient.setKeepAliveStrategy(new  
> > ConnectionKeepAliveStrategy() {
> >
> >            @Override
> >            public long getKeepAliveDuration(HttpResponse response,
> > HttpContext context) {
> >                // default keep alive for 100 seconds
> >                long keepAlive = 100 * 1000;
> >
> >                // Honor 'keep-alive' header
> >                HeaderElementIterator it = new  
> > BasicHeaderElementIterator(
> >                        response.headerIterator(HTTP.CONN_KEEP_ALIVE));
> >                while (it.hasNext()) {
> >                    HeaderElement he = it.nextElement();
> >                    String param = he.getName();
> >                    String value = he.getValue();
> >                    if (value != null &&  
> > param.equalsIgnoreCase("timeout"))
> > {
> >                        try {
> >                            keepAlive = Long.parseLong(value) * 1000;
> >                            break;
> >                        } catch (NumberFormatException ex) {
> >                            if (log.isInfoEnabled()) {
> >                                log.warn("Unable to parse timeout  
> > within
> > http header", ex);
> >                            }
> >                        }
> >                    }
> >                }
> >                // if you want custom keep-alive for a specific target
> >                //HttpHost target = (HttpHost)
> > context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
> >
> >                return keepAlive;
> >            }
> >        });
> >
> >        httpclient.setHttpRequestRetryHandler(new  
> > HttpRequestRetryHandler()
> > {
> >
> >            @Override
> >            public boolean retryRequest(
> >                    IOException exception,
> >                    int executionCount,
> >                    HttpContext context) {
> >                if (executionCount >= 5) {
> >                    // Do not retry if over max retry count
> >                    return false;
> >                }
> >                if (exception instanceof NoHttpResponseException) {
> >                    // Retry if the server dropped connection on us
> >                    return true;
> >                }
> >                if (exception instanceof SSLHandshakeException) {
> >                    // Do not retry on SSL handshake exception
> >                    return false;
> >                }
> >                HttpRequest request = (HttpRequest)  
> > context.getAttribute(
> >                        ExecutionContext.HTTP_REQUEST);
> >                boolean idempotent = !(request instanceof
> > HttpEntityEnclosingRequest);
> >                if (idempotent) {
> >                    // Retry if the request is considered idempotent
> >                    return true;
> >                }
> >                return false;
> >            }
> >        });
> >
> > And the get request code:
> >
> >        final HttpGet httpget = new HttpGet(URL);
> >        HttpResponse response = null;
> >        HttpEntity entity = null;
> >        String entityContent = null;
> >
> >        try {
> >            response = httpclient.execute(httpget);
> >            entity = response.getEntity();
> >
> >            if (entity != null) {
> >                entity.consumeContent();
> >            }
> >        } catch (UnknownHostException ex) {
> >            httpget.abort();
> >            entityContent = null;
> >            if (log.isDebugEnabled()) {
> >                log.debug("Unable to reach host", ex);
> >            }
> >        } catch (IOException ex) {
> >            httpget.abort();
> >            entityContent = null;
> >            log.error("Unable to consume entity content", ex);
> >        } catch (RuntimeException ex) {
> >            // In case of an unexpected exception you may want to abort
> >            // the HTTP request in order to shut down the underlying
> >            // connection and release it back to the connection  
> > manager.
> >            httpget.abort();
> >            entityContent = null;
> >            log.error("Unexpected exception during runtime", ex);
> >        }
> > -- 
> > View this message in context: 
> > http://old.nabble.com/Connection-Shutdown-Immediately-on-HttpClient-4.01-tp28978594p28978594.html
> > Sent from the HttpClient-User mailing list archive at Nabble.com.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
> 
> --------------------------------------------
> Ken Krugler
> +1 530-210-6378
> http://bixolabs.com
> e l a s t i c   w e b   m i n i n g
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to