net: allow "" as a hint wildcard to Resolve{IP,UDP,TCP}Addr

Also fixes comments on ResolveIPAddr.

Fixes #4476.

R=bradfitz, golang-dev
CC=golang-dev
https://golang.org/cl/6854129
diff --git a/src/pkg/net/ipraw_test.go b/src/pkg/net/ipraw_test.go
index c2d024d..f21889f 100644
--- a/src/pkg/net/ipraw_test.go
+++ b/src/pkg/net/ipraw_test.go
@@ -29,6 +29,9 @@
 	{"ip6", "::1", &IPAddr{IP: ParseIP("::1")}, nil},
 	{"ip6:icmp", "::1", &IPAddr{IP: ParseIP("::1")}, nil},
 
+	{"", "127.0.0.1", &IPAddr{IP: IPv4(127, 0, 0, 1)}, nil}, // Go 1.0 behavior
+	{"", "::1", &IPAddr{IP: ParseIP("::1")}, nil},           // Go 1.0 behavior
+
 	{"l2tp", "127.0.0.1", nil, UnknownNetworkError("l2tp")},
 	{"l2tp:gre", "127.0.0.1", nil, UnknownNetworkError("l2tp:gre")},
 	{"tcp", "1.2.3.4:123", nil, UnknownNetworkError("tcp")},
diff --git a/src/pkg/net/iprawsock.go b/src/pkg/net/iprawsock.go
index 45ad697..13bfd62 100644
--- a/src/pkg/net/iprawsock.go
+++ b/src/pkg/net/iprawsock.go
@@ -24,9 +24,11 @@
 
 // ResolveIPAddr parses addr as an IP address and resolves domain
 // names to numeric addresses on the network net, which must be
-// "ip", "ip4" or "ip6".  A literal IPv6 host address must be
-// enclosed in square brackets, as in "[::]".
+// "ip", "ip4" or "ip6".
 func ResolveIPAddr(net, addr string) (*IPAddr, error) {
+	if net == "" { // a hint wildcard for Go 1.0 undocumented behavior
+		net = "ip"
+	}
 	afnet, _, err := parseDialNetwork(net)
 	if err != nil {
 		return nil, err
diff --git a/src/pkg/net/tcp_test.go b/src/pkg/net/tcp_test.go
index e8588c6..bca7488 100644
--- a/src/pkg/net/tcp_test.go
+++ b/src/pkg/net/tcp_test.go
@@ -130,6 +130,9 @@
 	{"tcp", "[::1]:1", &TCPAddr{IP: ParseIP("::1"), Port: 1}, nil},
 	{"tcp6", "[::1]:65534", &TCPAddr{IP: ParseIP("::1"), Port: 65534}, nil},
 
+	{"", "127.0.0.1:0", &TCPAddr{IP: IPv4(127, 0, 0, 1), Port: 0}, nil}, // Go 1.0 behavior
+	{"", "[::1]:0", &TCPAddr{IP: ParseIP("::1"), Port: 0}, nil},         // Go 1.0 behavior
+
 	{"http", "127.0.0.1:0", nil, UnknownNetworkError("http")},
 }
 
diff --git a/src/pkg/net/tcpsock.go b/src/pkg/net/tcpsock.go
index 0a72a53..d5158b2 100644
--- a/src/pkg/net/tcpsock.go
+++ b/src/pkg/net/tcpsock.go
@@ -31,6 +31,8 @@
 func ResolveTCPAddr(net, addr string) (*TCPAddr, error) {
 	switch net {
 	case "tcp", "tcp4", "tcp6":
+	case "": // a hint wildcard for Go 1.0 undocumented behavior
+		net = "tcp"
 	default:
 		return nil, UnknownNetworkError(net)
 	}
diff --git a/src/pkg/net/udp_test.go b/src/pkg/net/udp_test.go
index 7c69b37..d3594b4 100644
--- a/src/pkg/net/udp_test.go
+++ b/src/pkg/net/udp_test.go
@@ -22,6 +22,9 @@
 	{"udp", "[::1]:1", &UDPAddr{IP: ParseIP("::1"), Port: 1}, nil},
 	{"udp6", "[::1]:65534", &UDPAddr{IP: ParseIP("::1"), Port: 65534}, nil},
 
+	{"", "127.0.0.1:0", &UDPAddr{IP: IPv4(127, 0, 0, 1), Port: 0}, nil}, // Go 1.0 behavior
+	{"", "[::1]:0", &UDPAddr{IP: ParseIP("::1"), Port: 0}, nil},         // Go 1.0 behavior
+
 	{"sip", "127.0.0.1:0", nil, UnknownNetworkError("sip")},
 }
 
diff --git a/src/pkg/net/udpsock.go b/src/pkg/net/udpsock.go
index e33c6f0..6e5e902 100644
--- a/src/pkg/net/udpsock.go
+++ b/src/pkg/net/udpsock.go
@@ -35,6 +35,8 @@
 func ResolveUDPAddr(net, addr string) (*UDPAddr, error) {
 	switch net {
 	case "udp", "udp4", "udp6":
+	case "": // a hint wildcard for Go 1.0 undocumented behavior
+		net = "udp"
 	default:
 		return nil, UnknownNetworkError(net)
 	}