@Override
  public void poll(long timeoutMs) throws IOException {
    poll(timeoutMs, null);
  }
Do whatever I/O can be done on each connection without blocking. This includes completing connections, completing
disconnections, initiating new sends, or making progress on in-progress sends or receives.
<p>

When this call is completed the user can check for completed sends, receives, connections or disconnects using
{@link #completedSends()}, {@link #completedReceives()}, {@link #connected()}, {@link #disconnected()}. These
lists will be cleared at the beginning of each {@link #poll(long)} call and repopulated by the call if any
completed I/O.

@param timeoutMs The amount of time to wait, in milliseconds. If negative, wait indefinitely.

@throws IOException If a send is given for which we have no existing connection or for which there is
        already an in-progress send
ambry-network/src/main/java/com/github/ambry/network/Selector.java