diff options
Diffstat (limited to 'src/pkg/net/dial.go')
-rw-r--r-- | src/pkg/net/dial.go | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/pkg/net/dial.go b/src/pkg/net/dial.go index 03b9d87be..1cf8e7915 100644 --- a/src/pkg/net/dial.go +++ b/src/pkg/net/dial.go @@ -24,7 +24,7 @@ import "os" // Dial("tcp", "127.0.0.1:123", "127.0.0.1:88") // func Dial(net, laddr, raddr string) (c Conn, err os.Error) { - switch prefixBefore(net, ':') { + switch net { case "tcp", "tcp4", "tcp6": var la, ra *TCPAddr if laddr != "" { @@ -137,7 +137,7 @@ func Listen(net, laddr string) (l Listener, err os.Error) { // The network string net must be a packet-oriented network: // "udp", "udp4", "udp6", or "unixgram". func ListenPacket(net, laddr string) (c PacketConn, err os.Error) { - switch prefixBefore(net, ':') { + switch net { case "udp", "udp4", "udp6": var la *UDPAddr if laddr != "" { @@ -162,18 +162,24 @@ func ListenPacket(net, laddr string) (c PacketConn, err os.Error) { return nil, err } return c, nil - case "ip", "ip4", "ip6": - var la *IPAddr - if laddr != "" { - if la, err = ResolveIPAddr(laddr); err != nil { + } + + if i := last(net, ':'); i > 0 { + switch net[0:i] { + case "ip", "ip4", "ip6": + var la *IPAddr + if laddr != "" { + if la, err = ResolveIPAddr(laddr); err != nil { + return nil, err + } + } + c, err := ListenIP(net, la) + if err != nil { return nil, err } + return c, nil } - c, err := ListenIP(net, la) - if err != nil { - return nil, err - } - return c, nil } + return nil, UnknownNetworkError(net) } |