code: func (ch *Channel) call(req message, res ...message) error {
  	if err := ch.send(req); err != nil {
  		return err
  	}
  
  	if req.wait() {
  		select {
  		case e, ok := <-ch.errors:
  			if ok {
  				return e
  			}
  			return ErrClosed
  
  		case msg := <-ch.rpc:
  			if msg != nil {
  				for _, try := range res {
  					if reflect.TypeOf(msg) == reflect.TypeOf(try) {
  						// *res = *msg
  						vres := reflect.ValueOf(try).Elem()
  						vmsg := reflect.ValueOf(msg).Elem()
  						vres.Set(vmsg)
  						return nil
  					}
  				}
  				return ErrCommandInvalid
  			}
  			// RPC channel has been closed without an error, likely due to a hard
  			// error on the Connection.  This indicates we have already been
  			// shutdown and if were waiting, will have returned from the errors chan.
  			return ErrClosed
  		}
  	}
  
  	return nil
  }
docs: // Performs a request/response call for when the message is not NoWait and is
  // specified as Synchronous.