-
Notifications
You must be signed in to change notification settings - Fork 221
Description
Hello,
Thank you for the library!
I am using library to discover specific services on local network by querying service type. There can be multiple services of the same type from same machine/device. There is an issue I have encountered, query responses that have multiple answers are not reported as separate entries.
Checkout wireshark screenshot:
Here 192.168.80.92 is the address of device running the client code. 192.168.80.182 is the server which responds to mdns queries (it is windows machine, uses bonjour service).
As you can see from screenshot, the are 2 services of type _itxpt_http._tcp. The Answer section contains 2 records, + additional records for each of these 2 answers.
The client code:
package main
import (
"context"
"fmt"
"os"
"os/signal"
"time"
"github.com/hashicorp/mdns"
)
func main() {
timeout := 2 * time.Second
ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)
ctx, cancel := context.WithTimeout(ctx, timeout)
defer cancel()
entriesCh := make(chan *mdns.ServiceEntry, 4)
go mdns.Query(&mdns.QueryParam{
Service: "_itxpt_http._tcp",
Entries: entriesCh,
DisableIPv6: true,
Domain: "local",
Timeout: timeout,
})
for {
select {
case entry := <-entriesCh:
fmt.Println("Got new entry:", entry.Name)
case <-ctx.Done():
fmt.Println("done")
return
}
}
}Client only registers 1 entry, with values of second answer:
$ go run client.go
Got new entry: vehicle-1000_inventory._itxpt_http._tcp.local.
doneIs there a way to get these values as two separate entries?
Like:
Got new entry: vehicle-1000_avms._itxpt_http._tcp.local.
Got new entry: vehicle-1000_inventory._itxpt_http._tcp.local.It seems like the entry gets overwritten with the data from last answer in this loop: https://github.com/hashicorp/mdns/blob/v1.0.5/client.go#L272
