You are right, the problem is not related to the idle timeout. Calling session.getIoSession().getService().getManagedSessions() in the sessionCreated() method of a SessionListener gives different results depending on which IoService you are running. With Mina, the session that triggered the event is already listed, so the first call returns 1 session. With Nio2, the session is obviously created but it is not yet managed. The first call returns 0 sessions.
I believe this is a bug because you cannot reliably implement an algorithm that depends on the number of managed sessions without special knowledge about the active IoService. My goal is to implement a bound on the total number of sessions. MAX_CONCURRENT_SESSIONS is per user, which is not sufficient. I suspect I would have the same problem with the size of getmanagedSessions() if I move the check directly in the SessionFactory as you suggested earlier. What is the best way to implement that bound on the global number of sessions? -----Original Message----- From: Guillaume Nodet [mailto:[email protected]] Sent: Thursday, May 07, 2015 12:32 PM To: [email protected] Subject: Re: Idle SSHD sessions still managed This should work. The idle timeout will close the ssh session which should in turn close the ioSession, and that session should be removed from the list of managed sessions. However, this happens slightly asynchronously, as the idle timeout will trigger the write of the disconnect message and the session will only be closed after the message has been written. 2015-05-07 17:40 GMT+02:00 Pellerin, Clement <[email protected]>: > I am implementing an SshServer with SSHD 0.14.0 When a connection > becomes idle, the client gets disconnected, but the connection remains > managed. > It still appears in > session.getIoSession().getService().getManagedSessions() > What am I doing wrong? > >
