implement non-blocking socket connections

This commit is contained in:
Joel Dice
2009-10-08 16:26:20 -06:00
parent 77fb0083a4
commit 59ba4aecf2
3 changed files with 38 additions and 5 deletions

View File

@ -13,8 +13,8 @@ package java.nio.channels;
public class SelectionKey {
public static final int OP_READ = 1 << 0;
public static final int OP_WRITE = 1 << 2;
public static final int OP_CONNECT = 1 << 3;
public static final int OP_ACCEPT = 1 << 4;
// public static final int OP_CONNECT = 1 << 3;
private final SelectableChannel channel;
private final Selector selector;
@ -57,6 +57,10 @@ public class SelectionKey {
return (readyOps & OP_WRITE) != 0;
}
public boolean isConnectable() {
return (readyOps & OP_CONNECT) != 0;
}
public boolean isAcceptable() {
return (readyOps & OP_ACCEPT) != 0;
}

View File

@ -58,6 +58,10 @@ public class SocketChannel extends SelectableChannel
return connected;
}
public boolean finishConnect() throws IOException {
return natFinishConnect(socket);
}
public void close() throws IOException {
if (isOpen()) {
super.close();
@ -126,6 +130,8 @@ public class SocketChannel extends SelectableChannel
private static native int natDoConnect(String host, int port, boolean blocking, boolean[] connected)
throws IOException;
private static native boolean natFinishConnect(int socket)
throws IOException;
private static native int natRead(int socket, byte[] buffer, int offset, int length)
throws IOException;
private static native int natWrite(int socket, byte[] buffer, int offset, int length)