Apache HttpClient CoreConnectionPNames.CONNECTION_TIMEOUT ne fait rien?

- Je obtenir de l'étrange comportement de HttpClient avec le paramètre CoreConnectionPNames.CONNECTION_TIMEOUT la valeur 1.
Je m'attends à ce que HttpGet demande échoue, jetant délai d'attente de connexion exception et pourtant, ils sont couronnés de succès. Cela semble irrationnel que cela signifie en fait que le protocole TCP handshake fini en moins de 1 milliseconde.

La httpclient version que je suis en utilisant comme on peut le voir dans cette pom.xml est

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.0.1</version>
        <type>jar</type>
    </dependency>

Voici le code:

import java.io.IOException;
import java.util.Random;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
public class TestNodeAliveness {
private static Logger log = Logger.getLogger(TestNodeAliveness.class);
public static boolean nodeBIT(String elasticIP) throws ClientProtocolException, IOException {
try {
HttpClient client = new DefaultHttpClient();
//The time it takes to open TCP connection.
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1);
//Timeout when server does not send data.
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 5000);
//Some tuning that is not required for bit tests.
client.getParams().setParameter(CoreConnectionPNames.STALE_CONNECTION_CHECK, false);
client.getParams().setParameter(CoreConnectionPNames.TCP_NODELAY, true);
HttpUriRequest request = new HttpGet("http://" + elasticIP);
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
if(entity == null) { 
return false;
} else {
System.out.println(EntityUtils.toString(entity));
}
//Close just in case.
request.abort();
} catch (Throwable e) {
log.warn("BIT Test failed for " + elasticIP);
e.printStackTrace();
return false;
}
return true;
}
public static void main(String[] args) throws ClientProtocolException, IOException {
nodeBIT("google.com?cant_cache_this=" + (new Random()).nextInt());
}
}

Comment est-ce possible?
Merci.

OriginalL'auteur Maxim Veksler | 2010-06-08