code: func (rf *Client) Call(g *ogdl.Graph) (*ogdl.Graph, error) {
  
  	log.Printf("Client.Call to %s, %d", rf.Host, rf.Protocol)
  
  	var err error
  	var r *ogdl.Graph
  
  	n := 2
  	for {
  		if rf.conn == nil {
  			err = rf.Dial()
  			if err != nil {
  				return nil, errors.New("Cannot establish a connection to " + rf.Host)
  			}
  		}
  
  		if rf.Protocol == 1 {
  			r, err = rf.callV1(g)
  		} else {
  			r, err = rf.callV2(g)
  		}
  		if err == nil {
  			break
  		}
  		n--
  		if n < 0 {
  			break
  		}
  		rf.conn = nil
  		log.Println("Call.retry", n)
  	}
  
  	return r, err
  }
docs: // Call makes a request and returns the response. It dials the host if not
  // connected.