[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