Hello.
This issue has already bean discussed in the past, but I have not found any actual solution to solve it. So, if someone has a new idea, it's welcome! The problem occurs with pooled connections, using a MultiThreadedHttpConnectionManager. Connections are created according to the client requests load, and kept in pool. After a given delay, about 15 or 20 seconds on Tomcat or Apache, the server dismisses old connections. At the other end, the http-client doesn't seem to detect the unilateral server's closing action, and send the new request: I don't understand how this can work ! Then, as from the server's point of view the connection is closed, nothing comes back, and the http-client fails reading the response. It throws a HttpRecoverableException, with the well known specific message: Error in parsing the status line from the response: unable to find line starting with "HTTP". Activating the stale connections checking fixes the problem, but induces an unacceptable performance down: requests that are processed in less than 1 ms take over 20-30 ms with checking. Another possible solution is not managing connections at all, using HTTP 1.0 and no connection manager, but this also leads to slower processing and, above all, excessive TCP/IP system resources waste. Note this occurs with JDK 1.3, 1.4 or 5.0. Is there any way to make the http-client handle such server's close, and avoid using a doubtful socket? I think an "acceptable" solution should be to limit the reuse of pooled connections giving them a maximum life-time (from the creation time) or inactivity delay (since last request): when the manager gets a connection from the pool, it should check the connection age, and discard it if too old. I've had a look to the library's sources to evaluate such a solution, but its design disallow extension since all the connection pool and adapter classes, and instantiation and selection policies are all private inside the manager code. Your comment and ideas are all welcome ! Thanks. -- Ephemeris Lappis
