diff options
Diffstat (limited to 'src/net/iprawsock.go')
-rw-r--r-- | src/net/iprawsock.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/net/iprawsock.go b/src/net/iprawsock.go new file mode 100644 index 000000000..5cc361390 --- /dev/null +++ b/src/net/iprawsock.go @@ -0,0 +1,54 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package net + +// IPAddr represents the address of an IP end point. +type IPAddr struct { + IP IP + Zone string // IPv6 scoped addressing zone +} + +// Network returns the address's network name, "ip". +func (a *IPAddr) Network() string { return "ip" } + +func (a *IPAddr) String() string { + if a == nil { + return "<nil>" + } + if a.Zone != "" { + return a.IP.String() + "%" + a.Zone + } + return a.IP.String() +} + +func (a *IPAddr) toAddr() Addr { + if a == nil { + return nil + } + return a +} + +// ResolveIPAddr parses addr as an IP address of the form "host" or +// "ipv6-host%zone" and resolves the domain name on the network net, +// which must be "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 := parseNetwork(net) + if err != nil { + return nil, err + } + switch afnet { + case "ip", "ip4", "ip6": + default: + return nil, UnknownNetworkError(net) + } + a, err := resolveInternetAddr(afnet, addr, noDeadline) + if err != nil { + return nil, err + } + return a.toAddr().(*IPAddr), nil +} |