void register(Selector selector) throws IOException { if ((interestOps & SelectionKey.OP_CONNECT) != 0) { ((Client) att).startClose(); // Log.w("Removed a Connection-Pending Channel, interestOps = " + interestOps); return; } // Client may be closed by closing of Connection-Pending Channel if (att instanceof Client && !((Client) att).isOpen()) { return; } att.selectionKey = channel.register(selector, interestOps, att); } }
client.startClose(); client.startClose();
void write(byte[] b, int off, int len) { if (status != STATUS_IDLE) { int fromLen = queue.length(); block(queue.add(b, off, len).length(), fromLen); return; } int bytesWritten; try { bytesWritten = socketChannel.write(ByteBuffer.wrap(b, off, len)); } catch (IOException e) { startClose(); return; } if (len > bytesWritten) { int fromLen = queue.length(); block(queue.add(b, off + bytesWritten, len - bytesWritten).length(), fromLen); status = STATUS_BUSY; interestOps(); } }