private SocketSessionImpl newSession( SocketChannel ch, IoHandler handler, IoServiceConfig config ) throws IOException { SocketSessionImpl session = new SocketSessionImpl( this, nextProcessor(), getListeners(), config, ch, handler, ch.socket().getRemoteSocketAddress() ); try { getFilterChainBuilder().buildFilterChain( session.getFilterChain() ); config.getFilterChainBuilder().buildFilterChain( session.getFilterChain() ); config.getThreadModel().buildFilterChain( session.getFilterChain() ); ( ( SocketFilterChain ) session.getFilterChain() ).sessionCreated( session ); } catch( Throwable e ) { throw ( IOException ) new IOException( "Failed to create a session." ).initCause( e ); } session.getIoProcessor().addNew( session ); return session; }