private NetworkReceive read(SelectionKey key, Transmission transmission) {
    long startTimeToReadInMs = time.milliseconds();
    try {
      boolean readComplete = transmission.read();
      NetworkReceive networkReceive = transmission.getNetworkReceive();
      if (readComplete) {
        transmission.onReceiveComplete();
        transmission.clearReceive();
      }
      return networkReceive;
    } catch (IOException e) {
      // We have key information if we log IOException here.
      handleReadWriteIOException(e, key);
      return null;
    } finally {
      long readTime = time.milliseconds() - startTimeToReadInMs;
      logger.trace("SocketServer time spent on read per key {} = {}", transmission.getConnectionId(), readTime);
    }
  }
Process reads from ready sockets
@return the {@link NetworkReceive} if no IOException during read().
ambry-network/src/main/java/com/github/ambry/network/Selector.java