diff --git a/mc/beacon.go b/mc/beacon.go index 83f8e8a58..73b4e80bc 100644 --- a/mc/beacon.go +++ b/mc/beacon.go @@ -10,10 +10,15 @@ type recv struct { src net.Addr } +type dst struct { + intf string + conn *net.UDPConn +} + type Beacon struct { group string port int - conns []*net.UDPConn + conns []dst inbox chan []byte outbox chan recv } @@ -61,25 +66,25 @@ func (b *Beacon) run() { dlog.Printf("failed to listen for multicast group on %q: %v", intf.Name, err) } } else { - b.conns = append(b.conns, conn) + b.conns = append(b.conns, dst{intf.Name, conn}) if debug { dlog.Printf("listening for multicast group on %q", intf.Name) } } } - for _, conn := range b.conns { - conn := conn + for _, dst := range b.conns { + dst := dst go func() { for { var bs = make([]byte, 1500) - n, addr, err := conn.ReadFrom(bs) + n, addr, err := dst.conn.ReadFrom(bs) if err != nil { dlog.Println(err) return } if debug { - dlog.Printf("recv %d bytes from %s on %v", n, addr, conn) + dlog.Printf("recv %d bytes from %s on %s", n, addr, dst.intf) } b.outbox <- recv{bs[:n], addr} } @@ -88,14 +93,14 @@ func (b *Beacon) run() { go func() { for bs := range b.inbox { - for _, conn := range b.conns { - _, err := conn.WriteTo(bs, group) + for _, dst := range b.conns { + _, err := dst.conn.WriteTo(bs, group) if err != nil { dlog.Println(err) return } if debug { - dlog.Printf("sent %d bytes to %s on %v", len(bs), group, conn) + dlog.Printf("sent %d bytes to %s on %s", len(bs), group, dst.intf) } } }