code: func (rpcClient *ReconnectRPCClient) Call(serviceMethod string, args interface{}, reply interface{}) (err error) {
  	rpcClient.mutex.Lock()
  	defer rpcClient.mutex.Unlock()
  	dialCall := func() error {
  		// If the rpc.Client is nil, we attempt to (re)connect with the remote endpoint.
  		if rpcClient.rpc == nil {
  			clnt, derr := rpc.DialHTTPPath("tcp", rpcClient.addr, rpcClient.endpoint)
  			if derr != nil {
  				return derr
  			}
  			rpcClient.rpc = clnt
  		}
  		// If the RPC fails due to a network-related error, then we reset
  		// rpc.Client for a subsequent reconnect.
  		return rpcClient.rpc.Call(serviceMethod, args, reply)
  	}
  	if err = dialCall(); err == rpc.ErrShutdown {
  		rpcClient.rpc.Close()
  		rpcClient.rpc = nil
  		err = dialCall()
  	}
  	return err
  }
docs: // Call makes a RPC call to the remote endpoint using the default codec, namely encoding/gob.