26
26
// boolean value is true, kernel supports IPv6 IPv4-mapping.
27
27
func probeIPv6Stack() (supportsIPv6, supportsIPv4map bool) {
28
28
var probes = []struct {
33
32
// IPv6 communication capability
34
{-1, TCPAddr{IP: ParseIP("::1")}, false},
33
{TCPAddr{IP: ParseIP("::1")}, false},
35
34
// IPv6 IPv4-mapped address communication capability
36
{-1, TCPAddr{IP: IPv4(127, 0, 0, 1)}, false},
35
{TCPAddr{IP: IPv4(127, 0, 0, 1)}, false},
40
38
for i := range probes {
41
probes[i].s, errno = syscall.Socket(syscall.AF_INET6, syscall.SOCK_STREAM, syscall.IPPROTO_TCP)
39
s, errno := syscall.Socket(syscall.AF_INET6, syscall.SOCK_STREAM, syscall.IPPROTO_TCP)
45
defer closesocket(probes[i].s)
46
44
sa, err := probes[i].la.toAddr().sockaddr(syscall.AF_INET6)
50
errno = syscall.Bind(probes[i].s, sa)
48
errno = syscall.Bind(s, sa)
271
269
// Convert "host:port" into IP address and port.
272
270
func hostPortToIP(net, hostport string) (ip IP, iport int, err os.Error) {
273
276
host, port, err := SplitHostPort(hostport)
280
282
// Try as an IP address.
281
283
addr = ParseIP(host)
305
p, i, ok := dtoi(port, 0)
307
p, i, ok = dtoi(port, 0)
306
308
if !ok || i != len(port) {
307
309
p, err = LookupPort(net, port)