type ipStackCapabilities … var ipStackCaps … // supportsIPv4 reports whether the platform supports IPv4 networking // functionality. func supportsIPv4() bool { … } // supportsIPv6 reports whether the platform supports IPv6 networking // functionality. func supportsIPv6() bool { … } // supportsIPv4map reports whether the platform supports mapping an // IPv4 address inside an IPv6 address at transport layer // protocols. See RFC 4291, RFC 4038 and RFC 3493. func supportsIPv4map() bool { … } type addrList … // isIPv4 reports whether addr contains an IPv4 address. func isIPv4(addr Addr) bool { … } // isNotIPv4 reports whether addr does not contain an IPv4 address. func isNotIPv4(addr Addr) bool { … } // forResolve returns the most appropriate address in address for // a call to ResolveTCPAddr, ResolveUDPAddr, or ResolveIPAddr. // IPv4 is preferred, unless addr contains an IPv6 literal. func (addrs addrList) forResolve(network, addr string) Addr { … } // first returns the first address which satisfies strategy, or if // none do, then the first address of any kind. func (addrs addrList) first(strategy func(Addr) bool) Addr { … } // partition divides an address list into two categories, using a // strategy function to assign a boolean label to each address. // The first address, and any with a matching label, are returned as // primaries, while addresses with the opposite label are returned // as fallbacks. For non-empty inputs, primaries is guaranteed to be // non-empty. func (addrs addrList) partition(strategy func(Addr) bool) (primaries, fallbacks addrList) { … } // filterAddrList applies a filter to a list of IP addresses, // yielding a list of Addr objects. Known filters are nil, ipv4only, // and ipv6only. It returns every address when the filter is nil. // The result contains at least one address when error is nil. func filterAddrList(filter func(IPAddr) bool, ips []IPAddr, inetaddr func(IPAddr) Addr, originalAddr string) (addrList, error) { … } // ipv4only reports whether addr is an IPv4 address. func ipv4only(addr IPAddr) bool { … } // ipv6only reports whether addr is an IPv6 address except IPv4-mapped IPv6 address. func ipv6only(addr IPAddr) bool { … } // SplitHostPort splits a network address of the form "host:port", // "host%zone:port", "[host]:port" or "[host%zone]:port" into host or // host%zone and port. // // A literal IPv6 address in hostport must be enclosed in square // brackets, as in "[::1]:80", "[::1%lo0]:80". // // See func Dial for a description of the hostport parameter, and host // and port results. func SplitHostPort(hostport string) (host, port string, err error) { … } func splitHostZone(s string) (host, zone string) { … } // JoinHostPort combines host and port into a network address of the // form "host:port". If host contains a colon, as found in literal // IPv6 addresses, then JoinHostPort returns "[host]:port". // // See func Dial for a description of the host and port parameters. func JoinHostPort(host, port string) string { … } // internetAddrList resolves addr, which may be a literal IP // address or a DNS name, and returns a list of internet protocol // family addresses. The result contains at least one address when // error is nil. func (r *Resolver) internetAddrList(ctx context.Context, net, addr string) (addrList, error) { … } // loopbackIP should be an internal detail, // but widely used packages access it using linkname. // Notable members of the hall of shame include: // - github.com/database64128/tfo-go/v2 // - github.com/metacubex/tfo-go // - github.com/sagernet/tfo-go // // Do not remove or change the type signature. // See go.dev/issue/67401. // //go:linkname loopbackIP func loopbackIP(net string) IP { … }