/** Callback to write data from the buffer. */
  private void flushBuffer() throws IOException {

    // prevent timeout for async,
    SelectionKey key = socket.getIOChannel().keyFor(socket.getPoller().getSelector());
    if (key != null) {
      NioEndpoint.KeyAttachment attach = (NioEndpoint.KeyAttachment) key.attachment();
      attach.access();
    }

    // write to the socket, if there is anything to write
    if (socket.getBufHandler().getWriteBuffer().position() > 0) {
      socket.getBufHandler().getWriteBuffer().flip();
      writeToSocket(socket.getBufHandler().getWriteBuffer(), true, false);
    }
  }