plgd-dev / go-coap

Implementation of CoAP Server & Client in Go

Home Page:https://coap.technology

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Can not send multicast message with NewClientConn

ihidchaos opened this issue · comments

Hi @jkralik, This issue is based on the issue #315 and your pull #316.
When my server joins this multicast group and listens on [ff03::1]:5683, I can receive a message from the group, but can not send a message to the group.

My test is:

func Test() {
	log.SetReportCaller(true)
	var mAddr = "[ff03::1]:5683"
	var network = "udp6"
	var iFace = "wpan0"
	var path = "/test"
	var payload = []byte("hello")

	conn, err := net.NewListenUDP(network, mAddr)
	if err != nil {
		log.Error(err)
		return
	}

	face, err := golangNet.InterfaceByName(iFace)
	if err != nil {
		log.Error(err)
		return
	}

	addr, err := golangNet.ResolveUDPAddr(network, mAddr)
	if err != nil {
		log.Error(err)
		return
	}

	err = conn.JoinGroup(face, addr)
	if err != nil {
		log.Error(err)
		return
	}

	err = conn.SetMulticastLoopback(true)
	if err != nil {
		log.Error(err)
		return
	}

	router := mux.NewRouter()
	router.DefaultHandleFunc(func(w mux.ResponseWriter, r *mux.Message) {
		msg, err := ioutil.ReadAll(r.Body)
		if err != nil {
			log.Error(err)
			return
		}
		log.Debug("%s send message %s", w.Client().RemoteAddr().String(), string(msg))
	})

	server := udp.NewServer(udp.WithMux(router))

	go func() {
		err = server.Serve(conn)
		if err != nil {
			log.Error(err)
			return
		}
	}()

	time.Sleep(time.Second)

	peer, err := golangNet.ResolveUDPAddr(network, mAddr)
	if err != nil {
		log.Error(err)
		return
	}

	cc, err := server.NewClientConn(peer)
	if err != nil {
		log.Error(err)
		return
	}

	ctx := context.Background()

	resp, err := cc.Put(ctx, path, message.AppJSON, bytes.NewReader(payload))
	if err != nil {
		log.Error(err)
		return
	}
	log.Info(resp.String())
}

the Put method call shows the error cannot write request: timeout: retransmission(4) was exhausted.
What should I do to make it work as the previous unicast client works?

Sorry, it was my mistake. It should be a Thread issue, not a CoAP issue. I have solved it. openthread/ot-br-posix#978 (comment)