code: func (m *Memberlist) pushPullNode(addr string, join bool) error {
  	defer metrics.MeasureSince([]string{"memberlist", "pushPullNode"}, time.Now())
  
  	// Attempt to send and receive with the node
  	remote, userState, err := m.sendAndReceiveState(addr, join)
  	if err != nil {
  		return err
  	}
  
  	if err := m.mergeRemoteState(join, remote, userState); err != nil {
  		return err
  	}
  	return nil
  }
docs: // pushPullNode does a complete state exchange with a specific node.