Index: src/main/java/org/mortbay/jetty/nio/SelectChannelConnector.java =================================================================== --- src/main/java/org/mortbay/jetty/nio/SelectChannelConnector.java (revision 1625) +++ src/main/java/org/mortbay/jetty/nio/SelectChannelConnector.java (working copy) @@ -21,7 +21,6 @@ import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; -import org.mortbay.io.Buffer; import org.mortbay.io.Connection; import org.mortbay.io.nio.SelectChannelEndPoint; import org.mortbay.io.nio.SelectorManager; @@ -198,7 +197,7 @@ _acceptChannel.socket().bind(addr,getAcceptQueueSize()); // Register accepts on the server socket with the selector. - _manager.register(_acceptChannel,SelectionKey.OP_ACCEPT); + _manager.register(_acceptChannel); } } Index: src/main/java/org/mortbay/io/nio/SelectorManager.java =================================================================== --- src/main/java/org/mortbay/io/nio/SelectorManager.java (revision 1625) +++ src/main/java/org/mortbay/io/nio/SelectorManager.java (working copy) @@ -3,6 +3,7 @@ import java.io.IOException; import java.nio.channels.CancelledKeyException; import java.nio.channels.ClosedChannelException; +import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; @@ -53,17 +54,26 @@ return _delaySelectKeyUpdate; } - public SelectionKey register(ServerSocketChannel acceptChannel, int op_accept) throws ClosedChannelException + public SelectionKey register(SocketChannel connectChannel, Object attchmt) throws ClosedChannelException { int set=0; // TODO next set? synchronized (_selectSet[set]) { + SelectionKey key = connectChannel.register(_selectSet[set].getSelector(), SelectionKey.OP_CONNECT, attchmt); + return key; + } + } + + public SelectionKey register(ServerSocketChannel acceptChannel) throws ClosedChannelException + { + int set=0; // TODO next set? + + synchronized (_selectSet[set]) + { SelectionKey key = acceptChannel.register(_selectSet[set].getSelector(), SelectionKey.OP_ACCEPT); return key; } - // TODO Auto-generated method stub - } public void doSelect(int acceptorID) throws IOException @@ -362,6 +372,15 @@ doDispatch(endpoint); } } + else if (key.isConnectable()) + { + SocketChannel channel = (SocketChannel) key.channel(); + channel.finishConnect(); + SelectionKey cKey = channel.register(_selectSet[_nextSet].getSelector(), SelectionKey.OP_READ, key.attachment()); + SelectChannelEndPoint endpoint=newEndPoint(channel,_selectSet[_nextSet],cKey); + if (endpoint != null) + doDispatch(endpoint); + } else { SelectChannelEndPoint endpoint = (SelectChannelEndPoint)key.attachment();