mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-02-03 22:18:39 +00:00
While at it, also implementing new OS resolver chosing logic, keeping only 2 LAN servers at any time, 1 for current one, and 1 for last used one.
29 lines
447 B
Go
29 lines
447 B
Go
package ctrld
|
|
|
|
type dnsFn func() []string
|
|
|
|
// nameservers returns DNS nameservers from system settings.
|
|
func nameservers() []string {
|
|
var dns []string
|
|
seen := make(map[string]bool)
|
|
ch := make(chan []string)
|
|
fns := dnsFns()
|
|
|
|
for _, fn := range fns {
|
|
go func(fn dnsFn) {
|
|
ch <- fn()
|
|
}(fn)
|
|
}
|
|
for range fns {
|
|
for _, ns := range <-ch {
|
|
if seen[ns] {
|
|
continue
|
|
}
|
|
seen[ns] = true
|
|
dns = append(dns, ns)
|
|
}
|
|
}
|
|
|
|
return dns
|
|
}
|