Skip to content

Instantly share code, notes, and snippets.

@wuyongzheng
Last active August 29, 2015 14:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wuyongzheng/43cc9dc07e13124663d1 to your computer and use it in GitHub Desktop.
Save wuyongzheng/43cc9dc07e13124663d1 to your computer and use it in GitHub Desktop.
Java Selector behaviour
Selecting r, return 1: r
recv 21 bytes
Selecting r, return 0: r
recv 0 bytes
Selecting rw, return 1: w
Selecting r, return 0: w
import java.net.InetSocketAddress;
import java.nio.channels.Selector;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
import java.nio.ByteBuffer;
public class TestSelect
{
public static void main (String [] args) throws Exception
{
SocketChannel socket = SocketChannel.open(new InetSocketAddress("127.0.0.1", 22));
socket.configureBlocking(false);
Selector selector = Selector.open();
SelectionKey selkey = socket.register(selector, 0);
int selected;
for (int i = 0; i < 2; i ++) {
selkey.interestOps(SelectionKey.OP_READ);
selected = selector.select(1000);
System.out.println("Selecting r, return " + selected + ": " +
(selector.selectedKeys().contains(selkey) && selkey.isReadable() ? "r" : "") +
(selector.selectedKeys().contains(selkey) && selkey.isWritable() ? "w" : ""));
ByteBuffer buffer = ByteBuffer.allocate(100);
int size = socket.read(buffer);
System.out.println("recv " + size + " bytes");
}
selkey.interestOps(SelectionKey.OP_READ | SelectionKey.OP_WRITE);
selected = selector.select(1000);
System.out.println("Selecting rw, return " + selected + ": " +
(selector.selectedKeys().contains(selkey) && selkey.isReadable() ? "r" : "") +
(selector.selectedKeys().contains(selkey) && selkey.isWritable() ? "w" : ""));
selkey.interestOps(SelectionKey.OP_READ);
selected = selector.select(1000);
System.out.println("Selecting r, return " + selected + ": " +
(selector.selectedKeys().contains(selkey) && selkey.isReadable() ? "r" : "") +
(selector.selectedKeys().contains(selkey) && selkey.isWritable() ? "w" : ""));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment