Deprecate custom listLocalIPCIDRs()

We don't need a custom `listLocalIPCIDRs()`; Golang now has a builtin:
`net.InterfaceAddrs()`. [0]

This is one of those wonderful commits that removes more lines than it
adds.

[0] https://pkg.go.dev/net#InterfaceAddrs
This commit is contained in:
Brian Cunnie
2024-12-03 11:21:06 -05:00
parent 0fc3c81641
commit b497beddd2

49
main.go
View File

@@ -205,11 +205,17 @@ func readFromTCP(tcpListener *net.TCPListener, x *xip.Xip, quiet bool) {
} }
func bindUDPAddressesIndividually(bindPort int) (udpConns []*net.UDPConn, unboundIPs []string) { func bindUDPAddressesIndividually(bindPort int) (udpConns []*net.UDPConn, unboundIPs []string) {
ipCIDRs := listLocalIPCIDRs() // typical value of net.Addr.String() → "::1/128" "172.19.0.17/23"
for _, ipCIDR := range ipCIDRs { // (don't worry about the port numbers in https://pkg.go.dev/net#Addr; they won't appear)
ip, _, err := net.ParseCIDR(ipCIDR) interfaceAddrs, err := net.InterfaceAddrs()
if err != nil { if err != nil {
log.Printf(`I couldn't parse the local interface "%s".`, ipCIDR) log.Printf(`I couldn't get the local interface addresses: "%s"`, err.Error())
return nil, nil
}
for _, interfaceAddr := range interfaceAddrs {
ip, _, err := net.ParseCIDR(interfaceAddr.String())
if err != nil {
log.Printf(`I couldn't parse the local interface "%s".`, interfaceAddr.String())
continue continue
} }
udpConn, err := net.ListenUDP("udp", &net.UDPAddr{ udpConn, err := net.ListenUDP("udp", &net.UDPAddr{
@@ -227,11 +233,17 @@ func bindUDPAddressesIndividually(bindPort int) (udpConns []*net.UDPConn, unboun
} }
func bindTCPAddressesIndividually(bindPort int) (tcpListeners []*net.TCPListener, unboundIPs []string) { func bindTCPAddressesIndividually(bindPort int) (tcpListeners []*net.TCPListener, unboundIPs []string) {
ipCIDRs := listLocalIPCIDRs() // typical value of net.Addr.String() → "::1/128" "172.19.0.17/23"
for _, ipCIDR := range ipCIDRs { // (don't worry about the port numbers in https://pkg.go.dev/net#Addr; they won't appear)
ip, _, err := net.ParseCIDR(ipCIDR) interfaceAddrs, err := net.InterfaceAddrs()
if err != nil { if err != nil {
log.Printf(`I couldn't parse the local interface "%s".`, ipCIDR) log.Printf(`I couldn't get the local interface addresses: "%s"`, err.Error())
return nil, nil
}
for _, interfaceAddr := range interfaceAddrs {
ip, _, err := net.ParseCIDR(interfaceAddr.String())
if err != nil {
log.Printf(`I couldn't parse the local interface "%s".`, interfaceAddr.String())
continue continue
} }
listener, err := net.ListenTCP("tcp", &net.TCPAddr{IP: ip, Port: bindPort}) listener, err := net.ListenTCP("tcp", &net.TCPAddr{IP: ip, Port: bindPort})
@@ -244,27 +256,6 @@ func bindTCPAddressesIndividually(bindPort int) (tcpListeners []*net.TCPListener
return tcpListeners, unboundIPs return tcpListeners, unboundIPs
} }
// TODO: replace this function with net.InterfaceAddrs() ([]Addr, error)
// typical addr "10.9.9.161/24"
func listLocalIPCIDRs() []string {
var ifaces []net.Interface
var cidrStrings []string
var err error
if ifaces, err = net.Interfaces(); err != nil {
panic(err)
}
for _, iface := range ifaces {
var cidrs []net.Addr
if cidrs, err = iface.Addrs(); err != nil {
panic(err)
}
for _, cidr := range cidrs {
cidrStrings = append(cidrStrings, cidr.String())
}
}
return cidrStrings
}
// Thanks https://stackoverflow.com/a/52152912/2510873 // Thanks https://stackoverflow.com/a/52152912/2510873
func isErrorAddressAlreadyInUse(err error) bool { func isErrorAddressAlreadyInUse(err error) bool {
var eOsSyscall *os.SyscallError var eOsSyscall *os.SyscallError