diff --git a/server-main.go b/server-main.go index 225af732e..49b5b8c8f 100644 --- a/server-main.go +++ b/server-main.go @@ -19,6 +19,7 @@ package main import ( "crypto/tls" "encoding/json" + "errors" "fmt" "net" "net/http" @@ -285,9 +286,18 @@ func checkPortAvailability(port int) { fatalIf(probe.NewError(e), fmt.Sprintf("Unable to list addresses on interface %s.", ifc.Name), nil) } for _, addr := range addrs { - ip := addr.(*net.IPNet).IP + ipnet, ok := addr.(*net.IPNet) + if !ok { + errorIf(probe.NewError(errors.New("")), "Interface type assertion to (*net.IPNet) failed.", nil) + continue + } + ip := ipnet.IP + network := "tcp4" + if ip.To4() == nil { + network = "tcp6" + } tcpAddr := net.TCPAddr{IP: ip, Port: port, Zone: ifc.Name} - l, e := net.ListenTCP("tcp", &tcpAddr) + l, e := net.ListenTCP(network, &tcpAddr) if e != nil { fatalIf(probe.NewError(e), fmt.Sprintf("Unable to listen on IP %s, port %.d", tcpAddr.IP, tcpAddr.Port), nil) }