synapse-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <>
Subject Re: Migrating Synapse to Latest HTTP Core
Date Wed, 24 Jul 2013 12:49:09 GMT
On Wed, 2013-07-24 at 13:45 +0200, Oleg Kalnichevski wrote:
> On Wed, 2013-07-24 at 01:40 -0700, Hiranya Jayathilaka wrote:
> > Hi again,
> > 
> > On Jul 24, 2013, at 1:36 AM, Hiranya Jayathilaka
> > <> wrote:


> > 
> > I've also noticed that the problem doesn't occur if we do not send any
> > messages in the 1st round. I verified this behavior with Synapse too.
> > If a test case doesn't send any messages to Synapse, the test case
> > that follows will run without any issues.
> > 
> Hiranya
> (1) The socket is CLOSE_WAIT state is from the client connection. It has
> nothing to do with the problem and can be gotten rid of by shutting down
> the client connection pool. 
> client.getConnectionManager().shutdown();
> (2) The 'Address already in use' problem goes away if the server is
> configured to re-use socket address
> reactorConfig.setSoReuseAddress(true);
> I think this option should be activated for integration tests running
> inside the same JVM anyway, but I'll investigate why the address remains
> bound even after the listener has been shut down. I am not yet sure
> whether this is a bug or an expected behavior.
> Oleg 

Just a quick follow-up. The problem appears to be Linux specific. The
same test app works fine for me on Windows XP.

I also modified slightly your code in order to have a finer control over
the client side.
System.out.println("Round 1");

DefaultHttpClientConnection conn = new DefaultHttpClientConnection();
try {
    Socket socket = new Socket("localhost", 8280);
    conn.bind(socket, new BasicHttpParams());
    conn.sendRequestHeader(new BasicHttpRequest("GET", "/"));
} catch (SocketTimeoutException ex) {
} finally {
   // this closes the socket the connection is bound to

System.out.println("Waiting - Shutdown in 5 secs");

System.out.println("\n\nRound 2");
System.out.println("Waiting - Shutdown in 5 secs");

If you just comment out the conn#receiveResponseHeader() statement the
client side socket will never be put into read mode, and (surprise,
surprise) the listener address will no longer be stuck in the bound

I am neither a Linux nor a TCP/IP specialist. I cannot tell why this is
happening. However, by the look of it, one must use 'SO_REUSE_ADDRESS'
option on Linux in order to be able to shut down and re-open the
listener on the same address if the socket bound to that address had
some data passing through it.

Anyone happens to have an idea?


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message