private ConnectExceptions readAcks(List sentCons, long startTime, long ackTimeout,
      long ackSDTimeout, ConnectExceptions cumulativeExceptions, DirectReplyProcessor processor) {

    ConnectExceptions ce = cumulativeExceptions;

    for (final Object sentCon : sentCons) {
      Connection con = (Connection) sentCon;
      // We don't expect replies on shared connections.
      if (con.isSharedResource()) {
        continue;
      }
      try {
        try {
          con.readAck(processor);
        } catch (SocketTimeoutException ex) {
          handleAckTimeout(ackTimeout, ackSDTimeout, con, processor);
        }
      } catch (ConnectionException conEx) {
        if (ce == null) {
          ce = new ConnectExceptions();
        }
        ce.addFailure(con.getRemoteAddress(), conEx);
      }
    }
    return ce;
  }
Sends a msg to a list of destinations. This code does some special optimizations to stream
large messages

@param mgr - the membership manager
@param p_destinations - the list of addresses to send the message to.
@param msg - the message to send
@param ackSAThreshold the severe alert threshold
@return number of bytes sent
@throws ConnectExceptions if message could not be send to its <code>destination</code>
@throws NotSerializableException If the msg cannot be serialized
geode-core/src/main/java/org/apache/geode/distributed/internal/direct/DirectChannel.java