package fcast import ( "github.com/hashicorp/mdns" "log" ) type DiscoveredHost struct { Name string IPv4 string IPv6 string } func Discover() ([]DiscoveredHost, error) { entriesCh := make(chan *mdns.ServiceEntry) var discoveredHosts []DiscoveredHost go func() { for entry := range entriesCh { if !validateEntry(entry) { continue } discoveredHosts = append(discoveredHosts, DiscoveredHost{ Name: entry.Name, IPv4: entry.AddrV4.String(), IPv6: entry.AddrV6.String(), }) } }() done := make(chan struct{}) go func() { err := mdns.Lookup("_fcast._tcp", entriesCh) if err != nil { log.Println("[ERROR] mdns: lookup error:", err) } close(entriesCh) close(done) }() select { case <-done: return discoveredHosts, nil } } func validateEntry(entry *mdns.ServiceEntry) bool { if entry.Port != DefaultPort { return false } return true }