Methods Summary |
---|
private void | checkClosed()
if (closed) {
throw new IOException("Stream is closed");
}
if (sock.isInputShutdown()) {
throw new IOException("Input Shutdown");
}
|
public void | close()
if (closed) {
return;
}
closed = true;
try {
selector.close();
selector = null;
sc = null;
} catch (Exception ie) {
if ( logger.isLoggable(Level.FINE) ) {
logger.log(Level.FINE, "" + ie.getMessage(), ie);
}
}
|
protected void | finalize()
try {
close();
} catch (Throwable t) {}
|
public synchronized int | read()
if (b1 == null)
b1 = new byte[1];
int n = this.read(b1);
if (n == 1)
return b1[0] & 0xff;
return -1;
|
public synchronized int | read(byte[] bs, int off, int len)
if ((off < 0) || (off > bs.length) || (len < 0) ||
((off + len) > bs.length) || ((off + len) < 0)) {
throw new IndexOutOfBoundsException();
} else if (len == 0)
return 0;
ByteBuffer bb = ((this.bs == bs)
? this.bb
: ByteBuffer.wrap(bs));
bb.position(off);
bb.limit(Math.min(off + len, bb.capacity()));
this.bb = bb;
this.bs = bs;
return read(bb);
|
private int | read(java.nio.ByteBuffer bb)
checkClosed();
waitForSelect();
return sc.read(bb);
|
private void | waitForSelect()
java.net.Socket sock = sc.socket();
if (sock.isClosed()) {
close();
throw new IOException("Socket Closed");
}
int timeout = sock.getSoTimeout();
Iterator it;
SelectionKey selKey;
selectorblock:
while (true) {
boolean timedout = true;
try {
int n = selector.select(timeout);
if (sock.isInputShutdown() || sock.isClosed()) {
throw new IOException("Input Shutdown");
}
if (n > 0) {
timedout = false;
}
it = selector.selectedKeys().iterator();
while (it.hasNext()) {
timedout = false;
selKey = (SelectionKey)it.next();
if (selKey.isValid() && selKey.isReadable()) {
it.remove();
break selectorblock;
}
}
} catch (Exception e) {
throw (IOException) (new IOException()).initCause(e);
}
if (timedout) {
boolean wakenup = ((ASSelector) selector).wakenUp();
if ( !wakenup && !Thread.currentThread().isInterrupted()) {
throw new java.net.SocketTimeoutException("Read timed out");
}
}
}
|