buffer.flip(); while (!hasMoreDataToFlush() && buffer.getBuf().remaining()>0) { transfer(buffer.getBuf(), socket.getBufHandler().getWriteBuffer()); if (buffer.getBuf().remaining() == 0) { bufIter.remove();
private synchronized void addToBB(byte[] buf, int offset, int length) throws IOException { if (length == 0) return; // Try to flush any data in the socket's write buffer first boolean dataLeft = flushBuffer(isBlocking()); // Keep writing until all the data is written or a non-blocking write // leaves data in the buffer while (!dataLeft && length > 0) { int thisTime = transfer(buf,offset,length,socket.getBufHandler().getWriteBuffer()); length = length - thisTime; offset = offset + thisTime; int written = writeToSocket(socket.getBufHandler().getWriteBuffer(), isBlocking(), true); if (written == 0) { dataLeft = true; } else { dataLeft = flushBuffer(isBlocking()); } } NioEndpoint.KeyAttachment ka = (NioEndpoint.KeyAttachment)socket.getAttachment(false); if (ka != null) ka.access();//prevent timeouts for just doing client writes if (!isBlocking() && length > 0) { // Remaining data must be buffered addToBuffers(buf, offset, length); } }