/**
  * Copy the information in the pollfd structs into the opss of the corresponding Channels. Add the
  * ready keys to the ready queue.
  */
 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;
 }