- parsePeer: use net.SplitHostPort (handles IPv6, stdlib convention) - tryConnect: take Go strings, own CGO allocation internally - RegisterToBackend: remove unreachable 'no HA candidates' error path - Sync Peers field comment between utils and backend config structs
24 lines
627 B
Go
24 lines
627 B
Go
package backend
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"strconv"
|
|
)
|
|
|
|
// parsePeer splits a "host:port" string. Uses net.SplitHostPort so IPv6
|
|
// bracket notation (e.g. "[::1]:9990") is handled correctly.
|
|
func parsePeer(peer string) (host string, port int, err error) {
|
|
h, portStr, err := net.SplitHostPort(peer)
|
|
if err != nil {
|
|
return "", 0, fmt.Errorf("invalid peer %q: %w", peer, err)
|
|
}
|
|
if h == "" {
|
|
return "", 0, fmt.Errorf("invalid peer %q: empty host", peer)
|
|
}
|
|
port, err = strconv.Atoi(portStr)
|
|
if err != nil || port <= 0 || port > 65535 {
|
|
return "", 0, fmt.Errorf("invalid port in peer %q", peer)
|
|
}
|
|
return h, port, nil
|
|
}
|