hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Koski (JIRA)" <j...@apache.org>
Subject [jira] Created: (HTTPCLIENT-908) java.net.SocketException: Socket closed in org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:130)
Date Wed, 20 Jan 2010 17:58:54 GMT
java.net.SocketException: Socket closed in org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:130)

                 Key: HTTPCLIENT-908
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-908
             Project: HttpComponents HttpClient
          Issue Type: Bug
          Components: HttpClient, HttpConn
    Affects Versions: 4.0 Final
         Environment: OS Version: Mac OS X Server 10.5.5 (9F33)
Hardware: Xserve Intel/2 Dual-Core x 3 GHz/16 GB

java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284)
Java HotSpot(TM) Server VM (build 1.5.0_16-133, mixed mode)

            Reporter: David Koski

I can't reproduce this in a controlled situation, but in my production environment I see about
400 of these per day:

Caused by: java.net.SocketException: Socket closed
		at java.net.SocketInputStream.socketRead0(Native Method)
		at java.net.SocketInputStream.read(SocketInputStream.java:129)
		at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:130)
		at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:127)
		at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:161)
		at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:159)
		at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:173)
		at org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:106)
		at org.apache.http.entity.BasicHttpEntity.consumeContent(BasicHttpEntity.java:142)
		at org.apache.http.conn.BasicManagedEntity.consumeContent(BasicManagedEntity.java:98)
		at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:767)
		at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:708)
		at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:699)

>From what I understand of "Socket closed", it means that we (httpclient likely) have locally
closed the socket we are trying to read.  I always get this same stacktrace.

I construct my client like this:

        return new DefaultHttpClient(generateConnectionManager(params), params) {

            protected BasicHttpProcessor createHttpProcessor() {
                final BasicHttpProcessor httpproc = new BasicHttpProcessor();
                httpproc.addInterceptor(new RequestDefaultHeaders());
                // Required protocol interceptors
                httpproc.addInterceptor(new RequestContent());
                httpproc.addInterceptor(new RequestTargetHost());
                // Recommended protocol interceptors

                 * This one adds connection:keep-alive to the request, but we do not want
that here.
                 * If we are talking directly to a service instance it will reply without
                 * control headers and with HTTP/1.0, which will cause it to close right away.
                 * If we are going through the netscaler it adds a connection:keep-alive and
we will
                 * respect that.
                 * httpproc.addInterceptor(new RequestClientConnControl());
                httpproc.addInterceptor(new RequestUserAgent());
                httpproc.addInterceptor(new RequestExpectContinue());
                // HTTP state management interceptors
                httpproc.addInterceptor(new RequestAddCookies());
                httpproc.addInterceptor(new ResponseProcessCookies());
                // HTTP authentication interceptors
                httpproc.addInterceptor(new RequestTargetAuthentication());
                httpproc.addInterceptor(new RequestProxyAuthentication());

                // https://issues.apache.org/jira/browse/HTTPCLIENT-883
                httpproc.addInterceptor(new HttpRequestInterceptor() {

                    public void process(final HttpRequest request, final HttpContext context)
throws HttpException,
                        IOException {
                        final HttpClientConnection conn = (HttpClientConnection) context
                        final int timeout = request.getParams().getIntParameter(CoreConnectionPNames.SO_TIMEOUT,

                return httpproc;


and the connection manager is generated like this:

        final SchemeRegistry schemeRegistry = generateSchemeRegistry();

         * See https://issues.apache.org/jira/browse/HTTPCLIENT-879

        Field tmp = null;
        try {
            tmp = SocketHttpClientConnection.class.getDeclaredField("open");
        } catch (final Exception e) {
            log.fatal("...", e);
        final Field openField = tmp;

        return new ThreadSafeClientConnManager(params, schemeRegistry) {

            protected ClientConnectionOperator createConnectionOperator(final SchemeRegistry
schreg) {
                return new DefaultClientConnectionOperator(schreg) {

                    public OperatedClientConnection createConnection() {
                        return new DefaultClientConnection() {

                            public void close() throws IOException {
                                if (!isOpen()) {

                                try {
                                    openField.set(this, false);
                                } catch (final Exception e) {
                                    // eat it

                                try {
                                    try {
                                        try {
                                        } catch (final IOException ignore) {
                                        try {
                                        } catch (final IOException ignore) {
                                    } catch (final UnsupportedOperationException ignore) {
                                        // if one isn't supported, the other one isn't either
                                } finally {


So I have a few patches in there, but this should be pretty similar to what is in 4.0.1. 
I do not have a repro case and inspection of the code did not reveal anything -- I don't see
a close(); read((;

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org

View raw message