code: protected int updateSelectedKeys() {
          int numKeysUpdated = 0;
          // Skip zeroth entry; it is for interrupts only
          for (int i=channelOffset; i<totalChannels; i++) {
              int rOps = pollWrapper.getReventOps(i);
              if (rOps != 0) {
                  SelectionKeyImpl sk = channelArray[i];
                  pollWrapper.putReventOps(i, 0);
                  if (selectedKeys.contains(sk)) {
                      if (sk.channel.translateAndSetReadyOps(rOps, sk)) {
                          numKeysUpdated++;
                      }
                  } else {
                      sk.channel.translateAndSetReadyOps(rOps, sk);
                      if ((sk.nioReadyOps() & sk.nioInterestOps()) != 0) {
                          selectedKeys.add(sk);
                          numKeysUpdated++;
                      }
                  }
              }
          }
          return numKeysUpdated;
      }
docs: Copy the information in the pollfd structs into the opss
  of the corresponding Channels. Add the ready keys to the
  ready queue.