16561: Handle implicit port numbers in getListenAddress, add tests.
[arvados.git] / lib / service / cmd.go
index b5e395bec828c879a9e86ac646cf82026873422c..9e45e0f7e828a340d5eee6d024eb9f8da21cf948 100644 (file)
@@ -273,7 +273,15 @@ func getListenAddr(svcs arvados.Services, prog arvados.ServiceName, log logrus.F
                        // intermediate proxy/routing)
                        listenURL = internalURL
                }
-               listener, err := net.Listen("tcp", listenURL.Host)
+               listenAddr := listenURL.Host
+               if _, _, err := net.SplitHostPort(listenAddr); err != nil {
+                       // url "https://foo.example/" (with no
+                       // explicit port name/number) means listen on
+                       // the well-known port for the specified
+                       // protocol, "foo.example:https".
+                       listenAddr = net.JoinHostPort(listenAddr, listenURL.Scheme)
+               }
+               listener, err := net.Listen("tcp", listenAddr)
                if err == nil {
                        listener.Close()
                        return listenURL, internalURL, nil