]> Cypherpunks repositories - gostls13.git/commitdiff
net: break up and simplify Dial a bit
authorBrad Fitzpatrick <bradfitz@golang.org>
Thu, 30 Jun 2011 04:56:13 +0000 (21:56 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Thu, 30 Jun 2011 04:56:13 +0000 (21:56 -0700)
No API or functional change.

R=jacek.masiulaniec, mikioh.mikioh, rsc
CC=golang-dev
https://golang.org/cl/4630081

src/pkg/net/dial.go

index ead775fe63e26cd5d1001e9b2a257a4384b7eae5..10c67dcc40a1ca6853700cd2c4740c7cb1ec8cf8 100644 (file)
@@ -6,6 +6,28 @@ package net
 
 import "os"
 
+func resolveNetAddr(op, net, addr string) (a Addr, err os.Error) {
+       if addr == "" {
+               return nil, &OpError{op, net, nil, errMissingAddress}
+       }
+       switch net {
+       case "tcp", "tcp4", "tcp6":
+               a, err = ResolveTCPAddr(net, addr)
+       case "udp", "udp4", "udp6":
+               a, err = ResolveUDPAddr(net, addr)
+       case "unix", "unixgram", "unixpacket":
+               a, err = ResolveUnixAddr(net, addr)
+       case "ip", "ip4", "ip6":
+               a, err = ResolveIPAddr(net, addr)
+       default:
+               err = UnknownNetworkError(net)
+       }
+       if err != nil {
+               return nil, &OpError{op, net + " " + addr, nil, err}
+       }
+       return
+}
+
 // Dial connects to the address addr on the network net.
 //
 // Known networks are "tcp", "tcp4" (IPv4-only), "tcp6" (IPv6-only),
@@ -23,56 +45,26 @@ import "os"
 //     Dial("tcp", "[de:ad:be:ef::ca:fe]:80")
 //
 func Dial(net, addr string) (c Conn, err os.Error) {
-       raddr := addr
-       if raddr == "" {
-               return nil, &OpError{"dial", net, nil, errMissingAddress}
+       addri, err := resolveNetAddr("dial", net, addr)
+       if err != nil {
+               return nil, err
        }
-       switch net {
-       case "tcp", "tcp4", "tcp6":
-               var ra *TCPAddr
-               if ra, err = ResolveTCPAddr(net, raddr); err != nil {
-                       goto Error
-               }
-               c, err := DialTCP(net, nil, ra)
-               if err != nil {
-                       return nil, err
-               }
-               return c, nil
-       case "udp", "udp4", "udp6":
-               var ra *UDPAddr
-               if ra, err = ResolveUDPAddr(net, raddr); err != nil {
-                       goto Error
-               }
-               c, err := DialUDP(net, nil, ra)
-               if err != nil {
-                       return nil, err
-               }
-               return c, nil
-       case "unix", "unixgram", "unixpacket":
-               var ra *UnixAddr
-               if ra, err = ResolveUnixAddr(net, raddr); err != nil {
-                       goto Error
-               }
+       switch ra := addri.(type) {
+       case *TCPAddr:
+               c, err = DialTCP(net, nil, ra)
+       case *UDPAddr:
+               c, err = DialUDP(net, nil, ra)
+       case *UnixAddr:
                c, err = DialUnix(net, nil, ra)
-               if err != nil {
-                       return nil, err
-               }
-               return c, nil
-       case "ip", "ip4", "ip6":
-               var ra *IPAddr
-               if ra, err = ResolveIPAddr(net, raddr); err != nil {
-                       goto Error
-               }
-               c, err := DialIP(net, nil, ra)
-               if err != nil {
-                       return nil, err
-               }
-               return c, nil
-
+       case *IPAddr:
+               c, err = DialIP(net, nil, ra)
+       default:
+               err = UnknownNetworkError(net)
+       }
+       if err != nil {
+               return nil, &OpError{"dial", net + " " + addr, nil, err}
        }
-       err = UnknownNetworkError(net)
-Error:
-       return nil, &OpError{"dial", net + " " + raddr, nil, err}
+       return
 }
 
 // Listen announces on the local network address laddr.