code: func (m *Memberlist) sendMsg(addr string, msg []byte) error {
  	// Check if we can piggy back any messages
  	bytesAvail := m.config.UDPBufferSize - len(msg) - compoundHeaderOverhead
  	if m.config.EncryptionEnabled() && m.config.GossipVerifyOutgoing {
  		bytesAvail -= encryptOverhead(m.encryptionVersion())
  	}
  	extra := m.getBroadcasts(compoundOverhead, bytesAvail)
  
  	// Fast path if nothing to piggypack
  	if len(extra) == 0 {
  		return m.rawSendMsgPacket(addr, nil, msg)
  	}
  
  	// Join all the messages
  	msgs := make([][]byte, 0, 1+len(extra))
  	msgs = append(msgs, msg)
  	msgs = append(msgs, extra...)
  
  	// Create a compound message
  	compound := makeCompoundMessage(msgs)
  
  	// Send the message
  	return m.rawSendMsgPacket(addr, nil, compound.Bytes())
  }
docs: // sendMsg is used to send a message via packet to another host. It will
  // opportunistically create a compoundMsg and piggy back other broadcasts.