I created a neat little feedback loop the other day with

@Override
public void exceptionCaught(IoSession session, Throwable cause) throws
Exception {
  session.write(cause);
}

I'm trying to take uncaught exceptions and push them over the wire... When a
client connection disconnects abruptly session.write() will throw an
IOException stating that fact. In a few seconds I'm completely out of heap
space. That's fun. So I have two questions... First, I suspect this is
sensible, but should I be more specific than just IOException:

@Override
    public void exceptionCaught(IoSession session, Throwable cause) throws
Exception {
        if (!(cause instanceof IOException)) {
            try {
                session.write(cause);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

Second, is there a specific graceful way to disconnect a client? I'm trying
to disconnect gracefully if the server response is taking longer than a
specified time with

now = new Date();
        long remaining = (new Date(start.getTime() + timeout)).getTime() -
now.getTime();
        CloseFuture closeFuture = future.getSession().close(false);
        try {
            closeFuture.await(remaining);
        } catch (InterruptedException e) {
//do nothing
        }
//tired of waiting, or we're closed:
        connector.dispose();

Reply via email to