code: func (p *Peer) PushAddrMsg(addresses []*wire.NetAddress) ([]*wire.NetAddress, error) {
  	addressCount := len(addresses)
  
  	// Nothing to send.
  	if addressCount == 0 {
  		return nil, nil
  	}
  
  	msg := wire.NewMsgAddr()
  	msg.AddrList = make([]*wire.NetAddress, addressCount)
  	copy(msg.AddrList, addresses)
  
  	// Randomize the addresses sent if there are more than the maximum allowed.
  	if addressCount > wire.MaxAddrPerMsg {
  		// Shuffle the address list.
  		for i := 0; i < wire.MaxAddrPerMsg; i++ {
  			j := i + rand.Intn(addressCount-i)
  			msg.AddrList[i], msg.AddrList[j] = msg.AddrList[j], msg.AddrList[i]
  		}
  
  		// Truncate it to the maximum size.
  		msg.AddrList = msg.AddrList[:wire.MaxAddrPerMsg]
  	}
  
  	p.QueueMessage(msg, nil)
  	return msg.AddrList, nil
  }
docs: // PushAddrMsg sends an addr message to the connected peer using the provided
  // addresses.  This function is useful over manually sending the message via
  // QueueMessage since it automatically limits the addresses to the maximum
  // number allowed by the message and randomizes the chosen addresses when there
  // are too many.  It returns the addresses that were actually sent and no
  // message will be sent if there are no entries in the provided addresses slice.
  //
  // This function is safe for concurrent access.