12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // 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
- }
|