Added missing TCPAddr and UDPAddr implementations to the net package
Этот коммит содержится в:
родитель
0bc19735f3
коммит
7706c41bf6
4 изменённых файлов: 138 добавлений и 1 удалений
|
@ -231,8 +231,8 @@ func pathsToOverride(goMinor int, needsSyscallPackage bool) map[string]bool {
|
||||||
"device/": false,
|
"device/": false,
|
||||||
"examples/": false,
|
"examples/": false,
|
||||||
"internal/": true,
|
"internal/": true,
|
||||||
"internal/fuzz/": false,
|
|
||||||
"internal/bytealg/": false,
|
"internal/bytealg/": false,
|
||||||
|
"internal/fuzz/": false,
|
||||||
"internal/reflectlite/": false,
|
"internal/reflectlite/": false,
|
||||||
"internal/task/": false,
|
"internal/task/": false,
|
||||||
"machine/": false,
|
"machine/": false,
|
||||||
|
|
|
@ -11,3 +11,31 @@ type IPAddr struct {
|
||||||
IP IP
|
IP IP
|
||||||
Zone string // IPv6 scoped addressing zone
|
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>"
|
||||||
|
}
|
||||||
|
ip := ipEmptyString(a.IP)
|
||||||
|
if a.Zone != "" {
|
||||||
|
return ip + "%" + a.Zone
|
||||||
|
}
|
||||||
|
return ip
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *IPAddr) isWildcard() bool {
|
||||||
|
if a == nil || a.IP == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return a.IP.IsUnspecified()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *IPAddr) opAddr() Addr {
|
||||||
|
if a == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,59 @@
|
||||||
package net
|
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 "<nil>"
|
||||||
|
}
|
||||||
|
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
|
// TCPConn is an implementation of the Conn interface for TCP network
|
||||||
// connections.
|
// connections.
|
||||||
type TCPConn struct {
|
type TCPConn struct {
|
||||||
|
|
55
src/net/udpsock.go
Обычный файл
55
src/net/udpsock.go
Обычный файл
|
@ -0,0 +1,55 @@
|
||||||
|
package net
|
||||||
|
|
||||||
|
import (
|
||||||
|
"internal/itoa"
|
||||||
|
"net/netip"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UDPAddr represents the address of a UDP end point.
|
||||||
|
type UDPAddr struct {
|
||||||
|
IP IP
|
||||||
|
Port int
|
||||||
|
Zone string // IPv6 scoped addressing zone
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddrPort returns the UDPAddr 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 *UDPAddr) 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, "udp".
|
||||||
|
func (a *UDPAddr) Network() string { return "udp" }
|
||||||
|
|
||||||
|
func (a *UDPAddr) String() string {
|
||||||
|
if a == nil {
|
||||||
|
return "<nil>"
|
||||||
|
}
|
||||||
|
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 *UDPAddr) isWildcard() bool {
|
||||||
|
if a == nil || a.IP == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return a.IP.IsUnspecified()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *UDPAddr) opAddr() Addr {
|
||||||
|
if a == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return a
|
||||||
|
}
|
Загрузка…
Создание таблицы
Сослаться в новой задаче