File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -140,14 +140,27 @@ var nsResolvers = []string{
140140 "213.42.20.20" , // Etisalat DNS (UAE)
141141}
142142
143- // QueryNSMulti tries multiple public resolvers to verify NS delegation .
144- // Returns on the first successful response .
143+ // QueryNSMulti tries all resolvers in parallel and returns the first successful result .
144+ // Overall deadline is the per-resolver timeout ( first responder wins) .
145145func QueryNSMulti (domain string , timeout time.Duration ) ([]string , bool ) {
146+ type nsResult struct {
147+ hosts []string
148+ ok bool
149+ }
150+ ch := make (chan nsResult , len (nsResolvers ))
146151 for _ , resolver := range nsResolvers {
147- hosts , ok := QueryNS (resolver , domain , timeout )
148- if ok && len (hosts ) > 0 {
149- return hosts , true
152+ go func (r string ) {
153+ hosts , ok := QueryNS (r , domain , timeout )
154+ ch <- nsResult {hosts , ok && len (hosts ) > 0 }
155+ }(resolver )
156+ }
157+ failures := 0
158+ for range nsResolvers {
159+ res := <- ch
160+ if res .ok {
161+ return res .hosts , true
150162 }
163+ failures ++
151164 }
152165 return nil , false
153166}
You can’t perform that action at this time.
0 commit comments