Index: HttpMethodBase.java =================================================================== RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/httpclient/HttpMethodBase.java,v retrieving revision 1.161 diff -u -r1.161 HttpMethodBase.java --- HttpMethodBase.java 8 Jul 2003 11:51:45 -0000 1.161 +++ HttpMethodBase.java 8 Jul 2003 13:38:28 -0000 @@ -258,6 +258,9 @@ /** true if we are finished with the connection */ private boolean doneWithConnection = false; + /** true if the connection must be dropped */ + private boolean forceCloseConnection = false; + /** Number of milliseconds to wait for 100-contunue response. */ private static final int RESPONSE_WAIT_TIME_MS = 3000; @@ -843,6 +846,30 @@ } /** + * Return true if the connection must be dropped due to some + * abnormal circumstances, false if normal decision + * process should take place. + * + * @return true if the connection must be dropped. + */ + protected boolean getForceCloseConnection() { + return this.forceCloseConnection; + } + + /** + * Set to true if the connection must be dropped due to some + * abnormal circumstances. Set to false if normal decision + * process should take place. + * + * @param b true if the connection must be dropped, false + * otherwise. + */ + protected void setForceCloseConnection(boolean b) { + this.forceCloseConnection = b; + } + + + /** * Return true if we should close the connection now. The connection will * only be left open if we are using HTTP1.1 or if "Connection: keep-alive" * was sent. @@ -853,11 +880,9 @@ */ protected boolean shouldCloseConnection(HttpConnection conn) { - // if we are not chunked and there is no content length the connection - // cannot be reused - if (responseHeaders.getFirstHeader("Transfer-Encoding") == null - && getResponseContentLength() < 0) { - LOG.debug("Should close connection as content-length is missing."); + // Connection must be closed due to an abnormal circumstance + if (getForceCloseConnection()) { + LOG.debug("Should forcefully close connection."); return true; } @@ -1268,6 +1293,7 @@ recoverableExceptionCount = 0; inExecute = false; doneWithConnection = false; + forceCloseConnection = false; } /** @@ -2053,14 +2079,16 @@ LOG.warn("Transfer-Encoding is set but does not contain \"chunked\": " + getResponseHeader("Transfer-Encoding")); } - // we assume that the response connection will be terminated by closing + // The connection must be terminated by closing // the socket as per RFC 2616, 3.6 + setForceCloseConnection(true); result = is; } } else { int expectedLength = getResponseContentLength(); if (expectedLength == -1) { if (canResponseHaveBody(statusLine.getStatusCode())) { + setForceCloseConnection(true); result = is; } } else {