go19.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // +build go1.9
  2. /*
  3. *
  4. * Copyright 2018 gRPC authors.
  5. *
  6. * Licensed under the Apache License, Version 2.0 (the "License");
  7. * you may not use this file except in compliance with the License.
  8. * You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. *
  18. */
  19. package dns
  20. import (
  21. "net"
  22. "golang.org/x/net/context"
  23. )
  24. var (
  25. defaultResolver netResolver = net.DefaultResolver
  26. )
  27. const defaultDNSSvrPort = "53"
  28. var customAuthorityDialler = func(authority string) func(ctx context.Context, network, address string) (net.Conn, error) {
  29. return func(ctx context.Context, network, address string) (net.Conn, error) {
  30. var dialer net.Dialer
  31. return dialer.DialContext(ctx, network, authority)
  32. }
  33. }
  34. var customAuthorityResolver = func(authority string) (netResolver, error) {
  35. host, port, err := parseTarget(authority, defaultDNSSvrPort)
  36. if err != nil {
  37. return nil, err
  38. }
  39. authorityWithPort := net.JoinHostPort(host, port)
  40. return &net.Resolver{
  41. PreferGo: true,
  42. Dial: customAuthorityDialler(authorityWithPort),
  43. }, nil
  44. }