diff --git a/dns/filters.go b/dns/filters.go index 456280fa..03089d4c 100644 --- a/dns/filters.go +++ b/dns/filters.go @@ -14,7 +14,7 @@ type geoipFilter struct{} func (gf *geoipFilter) Match(ip net.IP) bool { record, _ := mmdb.Instance().Country(ip) - return record.Country.IsoCode == "CN" || record.Country.IsoCode == "" + return record.Country.IsoCode != "CN" && record.Country.IsoCode != "" } type ipnetFilter struct { diff --git a/dns/resolver.go b/dns/resolver.go index 986aec79..dc526a7b 100644 --- a/dns/resolver.go +++ b/dns/resolver.go @@ -197,8 +197,7 @@ func (r *Resolver) fallbackExchange(m *D.Msg) (msg *D.Msg, err error) { res := <-msgCh if res.Error == nil { if ips := r.msgToIP(res.Msg); len(ips) != 0 { - if r.shouldFallback(ips[0]) { - go func() { <-fallbackMsg }() + if !r.shouldFallback(ips[0]) { msg = res.Msg err = res.Error return msg, err @@ -258,7 +257,7 @@ func (r *Resolver) msgToIP(msg *D.Msg) []net.IP { } func (r *Resolver) asyncExchange(client []dnsClient, msg *D.Msg) <-chan *result { - ch := make(chan *result) + ch := make(chan *result, 1) go func() { res, err := r.batchExchange(client, msg) ch <- &result{Msg: res, Error: err}