[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[jetty-users] Failing to connect with v9.2.2 HttpClient
|
I am having issues using Jetty HttpClient after upgrading from v9.0.4 to
v9.2.2.
I using RHEL 5.10 on a Dell Server. uname -r outputs: 2.6.18-371.8.1.el5
The machine does not have support for IPv6.
I am using Oracle Java 7u60 JRE.
When using v9.2.2 Jetty JARs, I did not see any connection attempt made
to the destination. Running tcpdump confirmed this.
After running strace on my test program[1], I found that the socket
syscall is failing with 9.2.2 with PF_INET6 and not retrying with
PF_INET. With v9.0.4, it retries with PF_INET and is successful.
strace -f output using v9.0.4:
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = -1 EAFNOSUPPORT (Address
family not supported by protocol)
#then later...
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 8
#Afterwards the connect syscall was successful, and request/response was
successful
strace -f output using v9.2.2:
socket(PF_INET6, SOCK_STREAM, IPPROTO_IP) = -1 EAFNOSUPPORT (Address
family not supported by protocol)
# no attempt at socket(PF_INET, ...)
Additionally, I tried running the program with
-Djava.net.preferIPv4Stack=true, but with the v9.2.2 JARs it still
attempted to create the socket with PF_INET6.
I am able to run a Jetty Servlet with v9.2.2 on the same machine without
any issues.
I also tried v9.1.5, and had the same results as with v9.2.2
Any help would be appreciated.
[1] Test.java
// Using jetty-client, jetty-http, jetty-util, and jetty-io JARs
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.eclipse.jetty.http.HttpMethod;
import org.eclipse.jetty.http.HttpVersion;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.client.api.Response;
import org.eclipse.jetty.client.api.Result;
import org.eclipse.jetty.client.api.Request;
import org.eclipse.jetty.client.util.BufferingResponseListener;
public class Test {
public static void main(String[] args) {
HttpClient jettyHttpClient = new HttpClient();
jettyHttpClient.setConnectTimeout(30000);
jettyHttpClient.setIdleTimeout(30000);
final ExecutorService executorService =
Executors.newFixedThreadPool(10);
jettyHttpClient.setExecutor(executorService);
try {
jettyHttpClient.start();
String url = "http://192.168.62.98:8090/test"; //Change
this to valid server
Request jettyClientRequest = jettyHttpClient.newRequest(url);
jettyClientRequest.timeout(30000, TimeUnit.MILLISECONDS);
jettyClientRequest.version(HttpVersion.HTTP_1_1);
jettyClientRequest.method(HttpMethod.GET);
jettyClientRequest.send(
new BufferingResponseListener(500 * 1024 * 1024)
{
@Override
public void onComplete(Result reqResult) {
String responseBody = getContentAsString();
Response response = reqResult.getResponse();
System.out.println(responseBody);
System.out.println("Status code: " +
response.getStatus());
System.exit(0);
}
});
} catch (final Exception e) {
System.out.println("Caught exception" + e);
}
}
}