code: func (c *connHdl) ServiceRequest(cmd *Command, args [][]byte) (resp Response, err Error) {
  	loginfo := "connHdl.ServiceRequest"
  
  	defer func() {
  		if re := recover(); re != nil {
  			// REVU - needs to be logged - TODO
  			err = newSystemErrorWithCause("ServiceRequest", re.(error))
  		}
  	}()
  
  	if !c.connected {
  		panic(fmt.Errorf("Connection %s is alredy closed", c.String()))
  	}
  
  	if cmd == &QUIT {
  		c.disconnect()
  		return
  	}
  
  	buff := CreateRequestBytes(cmd, args)
  	sendRequest(c.conn, buff) // panics
  
  	// REVU - this demands resp to be non-nil even in case of io errors
  	// TODO - look into this
  	resp, e := GetResponse(c.reader, cmd)
  	if e != nil {
  		panic(fmt.Errorf("%s(%s) - failed to get response", loginfo, cmd.Code))
  	}
  
  	// handle Redis server ERR - don't panic
  	if resp.IsError() {
  		redismsg := fmt.Sprintf(" [%s]: %s", cmd.Code, resp.GetMessage())
  		err = newRedisError(redismsg)
  	}
  
  	return
  }
docs: // Implementation of SyncConnection.ServiceRequest.