code: func (m *Memberlist) sendUserMsg(addr string, sendBuf []byte) error {
  	conn, err := m.transport.DialTimeout(addr, m.config.TCPTimeout)
  	if err != nil {
  		return err
  	}
  	defer conn.Close()
  
  	bufConn := bytes.NewBuffer(nil)
  	if err := bufConn.WriteByte(byte(userMsg)); err != nil {
  		return err
  	}
  
  	header := userMsgHeader{UserMsgLen: len(sendBuf)}
  	hd := codec.MsgpackHandle{}
  	enc := codec.NewEncoder(bufConn, &hd)
  	if err := enc.Encode(&header); err != nil {
  		return err
  	}
  	if _, err := bufConn.Write(sendBuf); err != nil {
  		return err
  	}
  	return m.rawSendMsgStream(conn, bufConn.Bytes())
  }
docs: // sendUserMsg is used to stream a user message to another host.