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]