From d0f432b4d4baa8e4e5c13b6287cbb1c192f91b35 Mon Sep 17 00:00:00 2001 From: norman Date: Tue, 10 Apr 2012 11:18:34 +0200 Subject: [PATCH] Accept all ready sockets for the SelectionKey. See #240 --- .../channel/socket/nio/SelectorEventLoop.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/transport/src/main/java/io/netty/channel/socket/nio/SelectorEventLoop.java b/transport/src/main/java/io/netty/channel/socket/nio/SelectorEventLoop.java index 4eb97cab09..6bd75de725 100644 --- a/transport/src/main/java/io/netty/channel/socket/nio/SelectorEventLoop.java +++ b/transport/src/main/java/io/netty/channel/socket/nio/SelectorEventLoop.java @@ -335,17 +335,22 @@ abstract class SelectorEventLoop extends SingleThreadEventLoop { protected boolean accept(SelectionKey key) { NioServerSocketChannel channel = (NioServerSocketChannel) key.attachment(); try { - SocketChannel acceptedSocket = channel.socket.accept(); - if (acceptedSocket != null) { - + boolean handled = false; + + // accept all sockets that are waiting atm + for (;;) { + SocketChannel acceptedSocket = channel.socket.accept(); + if (acceptedSocket == null) { + break; + } // TODO: Remove the casting stuff ChannelPipeline pipeline = channel.getConfig().getPipelineFactory().getPipeline(); registerTask(NioAcceptedSocketChannel.create(channel.getFactory(), pipeline, channel, channel.getPipeline().getSink(), acceptedSocket, (NioWorker) this), null); - return true; + handled = true; } - return false; + return handled; } catch (SocketTimeoutException e) { // Thrown every second to get ClosedChannelException // raised.