github.com/q45/go@v0.0.0-20151101211701-a4fb8c13db3f/src/net/tcpsock.go (about)

     1  // Copyright 2009 The Go Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package net
     6  
     7  // TCPAddr represents the address of a TCP end point.
     8  type TCPAddr struct {
     9  	IP   IP
    10  	Port int
    11  	Zone string // IPv6 scoped addressing zone
    12  }
    13  
    14  // Network returns the address's network name, "tcp".
    15  func (a *TCPAddr) Network() string { return "tcp" }
    16  
    17  func (a *TCPAddr) String() string {
    18  	if a == nil {
    19  		return "<nil>"
    20  	}
    21  	ip := ipEmptyString(a.IP)
    22  	if a.Zone != "" {
    23  		return JoinHostPort(ip+"%"+a.Zone, itoa(a.Port))
    24  	}
    25  	return JoinHostPort(ip, itoa(a.Port))
    26  }
    27  
    28  func (a *TCPAddr) isWildcard() bool {
    29  	if a == nil || a.IP == nil {
    30  		return true
    31  	}
    32  	return a.IP.IsUnspecified()
    33  }
    34  
    35  func (a *TCPAddr) opAddr() Addr {
    36  	if a == nil {
    37  		return nil
    38  	}
    39  	return a
    40  }
    41  
    42  // ResolveTCPAddr parses addr as a TCP address of the form "host:port"
    43  // or "[ipv6-host%zone]:port" and resolves a pair of domain name and
    44  // port name on the network net, which must be "tcp", "tcp4" or
    45  // "tcp6".  A literal address or host name for IPv6 must be enclosed
    46  // in square brackets, as in "[::1]:80", "[ipv6-host]:http" or
    47  // "[ipv6-host%zone]:80".
    48  func ResolveTCPAddr(net, addr string) (*TCPAddr, error) {
    49  	switch net {
    50  	case "tcp", "tcp4", "tcp6":
    51  	case "": // a hint wildcard for Go 1.0 undocumented behavior
    52  		net = "tcp"
    53  	default:
    54  		return nil, UnknownNetworkError(net)
    55  	}
    56  	addrs, err := internetAddrList(net, addr, noDeadline)
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  	return addrs.first(isIPv4).(*TCPAddr), nil
    61  }