[prev in list] [next in list] [prev in thread] [next in thread]
List: httpclient-users
Subject: Re: Question in Timeouts when writing data
From: Oleg Kalnichevski <olegk () apache ! org>
Date: 2012-05-04 11:07:12
Message-ID: 1336129632.13924.13.camel () ubuntu
[Download RAW message or body]
On Fri, 2012-05-04 at 08:59 +0200, Daniel Stucky wrote:
> Hi,
>
> the SMILA project uses HttpClient 4.1.2 and is very happy with it.
>
> In order to improve system availability and reliability we did some tests on "what \
> happens to the HTTP communication on disconnects" (e.g. a physical disconnect of \
> the network cable). As it is not possible to check beforehand if a connection is \
> available and an operation is executable successfully we experimented with \
> timeouts:
> Using something like
> client.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT, 30000);
> helps when reading data from a server response.
>
> But what about writing to the server ? Checking the documentation and the code we \
> could not find anything that addresses timeouts on write operations. The current \
> behavior on my machine (Ubuntu 10) is that the call blocks for about 15 minutes and \
> then the following exception is thrown:
> do_ypcall: clnt_call: RPC: Unable to send; errno = Network is unreachable
> YPBINDPROC_DOMAIN: Domain not bound
> java.net.UnknownHostException: <machine-name>
> at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
> at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850)
> at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201)
> at java.net.InetAddress.getAllByName0(InetAddress.java:1154)
> at java.net.InetAddress.getAllByName(InetAddress.java:1084)
> at java.net.InetAddress.getAllByName(InetAddress.java:1020)
> at org.apache.http.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:242)
> at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:130)
> at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
> at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
> at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
> at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
> at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
> at ...
>
> Is there anything we can do to improve the situation with write operations ?
> This is critical because HTTP communication consists always of write/read pairs \
> (from the client perspective).
> Bye,
> Daniel
>
Java classic (blocking) i/o model does not support timeouts on write
operations. There is not much we can do about it. However, if the
connection gets reset during a write operation I believe the operation
should get unblocked with a SocketException of some sort. Unfortunately
I cannot say if unplugging the cable should be enough to simulate a
connection reset.
Oleg
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic