package net import ( "internal/itoa" "net/netip" ) // TCPAddr represents the address of a TCP end point. type TCPAddr struct { IP IP Port int Zone string // IPv6 scoped addressing zone } // AddrPort returns the TCPAddr a as a netip.AddrPort. // // If a.Port does not fit in a uint16, it's silently truncated. // // If a is nil, a zero value is returned. func (a *TCPAddr) AddrPort() netip.AddrPort { if a == nil { return netip.AddrPort{} } na, _ := netip.AddrFromSlice(a.IP) na = na.WithZone(a.Zone) return netip.AddrPortFrom(na, uint16(a.Port)) } // Network returns the address's network name, "tcp". func (a *TCPAddr) Network() string { return "tcp" } func (a *TCPAddr) String() string { if a == nil { return "" } ip := ipEmptyString(a.IP) if a.Zone != "" { return JoinHostPort(ip+"%"+a.Zone, itoa.Itoa(a.Port)) } return JoinHostPort(ip, itoa.Itoa(a.Port)) } func (a *TCPAddr) isWildcard() bool { if a == nil || a.IP == nil { return true } return a.IP.IsUnspecified() } func (a *TCPAddr) opAddr() Addr { if a == nil { return nil } return a } // TCPConn is an implementation of the Conn interface for TCP network // connections. type TCPConn struct { conn } func (c *TCPConn) CloseWrite() error { return &OpError{"close", "", nil, nil, ErrNotImplemented} }