views:

303

answers:

2

Hello, I have a rather annoying problem in my server application.

I bind Apache Mina with the following code:

acceptor.bind(new InetSocketAddress(PORT));

Where acceptor is an NioSocketAcceptor. Over a HTTP interface I can shutdown the server so I can restart it.

Server.ioAcceptor.unbind(new InetSocketAddress(Server.PORT));
        for(IoSession session: Server.ioAcceptor.getManagedSessions().values()){
            if(session.isConnected() && !session.isClosing()){
                session.close(false);
            }
        }
        Server.ioAcceptor.dispose();

        Main.transport.stop();
        Logger.getRootLogger().warn("System going down. Request from "+context.getRemoteAddress());
        System.exit(10);       

This is the code I use to stop the Mina server. However if I try to start the server again in the next couple of minutes. (Somewhere between 5 minutes and 15 minutes) I get the following exception on start up: java.net.BindException: Address already in use

I also tried a simple ioAcceptor.unbind() but there was no difference. The server runs on Centos 5 with OpenJDK. Apache Mina version is 2.0 RC1.

Thank you in advance for any ideas on how to resolve this.

A: 

Not that I'm familiar with MINA, but how does

netstat -apn | grep PORT
ps -ef | grep java

look like?

Oh, ok. Did you hit the command with root user privilege?

Enno Shioji
They both show nothing. "lsof -i" also shows no connections on that port
Kosaki
@Kosaki: PS. Sorry I should have made this a comment, not an answer..
Enno Shioji
A: 

You need to be careful with the close otherwise TCP behaves in this way. See this

LenW
Thanks. I am trying this now, but I must wait to see the results. Any ideas on how I would go about testing this without putting it on the production server? I normally have around 2000 sockets open, and it is hard to replicate in a test environment.
Kosaki
Just open and close one socket and see if it works ?
LenW