Can not send multicast message with NewClientConn
ihidchaos opened this issue · comments
GuoYuchao commented
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?
GuoYuchao commented
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)