]> Cypherpunks repositories - gostls13.git/commitdiff
net: stop using GetHostByName and GetServByName
authorAlex Brainman <alex.brainman@gmail.com>
Tue, 19 Apr 2016 04:31:41 +0000 (14:31 +1000)
committerAlex Brainman <alex.brainman@gmail.com>
Tue, 19 Apr 2016 05:53:25 +0000 (05:53 +0000)
Go 1.6 requires Windows XP or later. I have:

C:\>systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name:                   Microsoft Windows XP Professional
OS Version:                5.1.2600 Service Pack 3 Build 2600

Running "go test" PASSes on my system after this CL is applied.

Change-Id: Id59d169138c4a4183322c89ee7e766fb74d381fa
Reviewed-on: https://go-review.googlesource.com/22209
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/net/fd_windows.go
src/net/lookup_windows.go

index ca46bf9361019886b998ce54d0df2b13fa45bf79..49e79d6a950c04fae759d1e6c799c60b4ca15258 100644 (file)
@@ -42,11 +42,6 @@ func sysInit() {
                initErr = os.NewSyscallError("wsastartup", e)
        }
        canCancelIO = syscall.LoadCancelIoEx() == nil
-       if syscall.LoadGetAddrInfo() == nil {
-               lookupPort = newLookupPort
-               lookupIP = newLookupIP
-       }
-
        hasLoadSetFileCompletionNotificationModes = syscall.LoadSetFileCompletionNotificationModes() == nil
        if hasLoadSetFileCompletionNotificationModes {
                // It's not safe to use FILE_SKIP_COMPLETION_PORT_ON_SUCCESS if non IFS providers are installed:
index 7a04cc89984c096064684cb946c6f724a2ce9d87..5f65c2d00d4de5c40415047310ba4fe9635fe8a0 100644 (file)
@@ -12,11 +12,6 @@ import (
        "unsafe"
 )
 
-var (
-       lookupPort = oldLookupPort
-       lookupIP   = oldLookupIP
-)
-
 func getprotobyname(name string) (proto int, err error) {
        p, err := syscall.GetProtoByName(name)
        if err != nil {
@@ -71,61 +66,7 @@ func lookupHost(ctx context.Context, name string) ([]string, error) {
        return addrs, nil
 }
 
-func gethostbyname(name string) (addrs []IPAddr, err error) {
-       // caller already acquired thread
-       h, err := syscall.GetHostByName(name)
-       if err != nil {
-               return nil, os.NewSyscallError("gethostbyname", err)
-       }
-       switch h.AddrType {
-       case syscall.AF_INET:
-               i := 0
-               addrs = make([]IPAddr, 100) // plenty of room to grow
-               for p := (*[100](*[4]byte))(unsafe.Pointer(h.AddrList)); i < cap(addrs) && p[i] != nil; i++ {
-                       addrs[i] = IPAddr{IP: IPv4(p[i][0], p[i][1], p[i][2], p[i][3])}
-               }
-               addrs = addrs[0:i]
-       default: // TODO(vcc): Implement non IPv4 address lookups.
-               return nil, syscall.EWINDOWS
-       }
-       return addrs, nil
-}
-
-func oldLookupIP(ctx context.Context, name string) ([]IPAddr, error) {
-       // GetHostByName return value is stored in thread local storage.
-       // Start new os thread before the call to prevent races.
-       type ret struct {
-               addrs []IPAddr
-               err   error
-       }
-       ch := make(chan ret, 1)
-       go func() {
-               acquireThread()
-               defer releaseThread()
-               runtime.LockOSThread()
-               defer runtime.UnlockOSThread()
-               addrs, err := gethostbyname(name)
-               ch <- ret{addrs: addrs, err: err}
-       }()
-       select {
-       case r := <-ch:
-               if r.err != nil {
-                       r.err = &DNSError{Err: r.err.Error(), Name: name}
-               }
-               return r.addrs, r.err
-       case <-ctx.Done():
-               // TODO(bradfitz,brainman): cancel the ongoing
-               // gethostbyname?  For now we just let it finish and
-               // write to the buffered channel.
-               return nil, &DNSError{
-                       Name:      name,
-                       Err:       ctx.Err().Error(),
-                       IsTimeout: ctx.Err() == context.DeadlineExceeded,
-               }
-       }
-}
-
-func newLookupIP(ctx context.Context, name string) ([]IPAddr, error) {
+func lookupIP(ctx context.Context, name string) ([]IPAddr, error) {
        // TODO(bradfitz,brainman): use ctx?
 
        type ret struct {
@@ -184,53 +125,7 @@ func newLookupIP(ctx context.Context, name string) ([]IPAddr, error) {
        }
 }
 
-func getservbyname(network, service string) (int, error) {
-       acquireThread()
-       defer releaseThread()
-       switch network {
-       case "tcp4", "tcp6":
-               network = "tcp"
-       case "udp4", "udp6":
-               network = "udp"
-       }
-       s, err := syscall.GetServByName(service, network)
-       if err != nil {
-               return 0, os.NewSyscallError("getservbyname", err)
-       }
-       return int(syscall.Ntohs(s.Port)), nil
-}
-
-func oldLookupPort(ctx context.Context, network, service string) (int, error) {
-       // GetServByName return value is stored in thread local storage.
-       // Start new os thread before the call to prevent races.
-       type result struct {
-               port int
-               err  error
-       }
-       ch := make(chan result) // unbuffered
-       go func() {
-               acquireThread()
-               defer releaseThread()
-               runtime.LockOSThread()
-               defer runtime.UnlockOSThread()
-               port, err := getservbyname(network, service)
-               select {
-               case ch <- result{port: port, err: err}:
-               case <-ctx.Done():
-               }
-       }()
-       select {
-       case r := <-ch:
-               if r.err != nil {
-                       r.err = &DNSError{Err: r.err.Error(), Name: network + "/" + service}
-               }
-               return r.port, r.err
-       case <-ctx.Done():
-               return 0, mapErr(ctx.Err())
-       }
-}
-
-func newLookupPort(ctx context.Context, network, service string) (int, error) {
+func lookupPort(ctx context.Context, network, service string) (int, error) {
        // TODO(bradfitz): finish ctx plumbing. Nothing currently depends on this.
        acquireThread()
        defer releaseThread()