code: func (stream *ImpatientStream) Recv() (*orderer.DeliverResponse, error) {
  	// Initialize a timeout to cancel the stream when it expires
  	timeout := time.NewTimer(stream.waitTimeout)
  	defer timeout.Stop()
  
  	responseChan := make(chan errorAndResponse, 1)
  
  	// receive waitGroup ensures the goroutine below exits before
  	// this function exits.
  	var receive sync.WaitGroup
  	receive.Add(1)
  	defer receive.Wait()
  
  	go func() {
  		defer receive.Done()
  		resp, err := stream.AtomicBroadcast_DeliverClient.Recv()
  		responseChan <- errorAndResponse{err: err, resp: resp}
  	}()
  
  	select {
  	case <-timeout.C:
  		stream.cancelFunc()
  		return nil, errors.Errorf("didn't receive a response within %v", stream.waitTimeout)
  	case respAndErr := <-responseChan:
  		return respAndErr.resp, respAndErr.err
  	}
  }
docs: // Recv blocks until a response is received from the stream or the
  // timeout expires.