From 0b7b613bbaca1d43bb637bd99c04453f0119b20c Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Fri, 21 Oct 2016 16:03:50 +0200 Subject: [PATCH] Add BindNetwork to GenericApiServer.Config --- pkg/genericapiserver/config.go | 3 +++ pkg/genericapiserver/serve.go | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/genericapiserver/config.go b/pkg/genericapiserver/config.go index 44916181667..98c51b25f46 100644 --- a/pkg/genericapiserver/config.go +++ b/pkg/genericapiserver/config.go @@ -177,6 +177,9 @@ type Config struct { type ServingInfo struct { // BindAddress is the ip:port to serve on BindAddress string + // BindNetwork is the type of network to bind to - defaults to "tcp", accepts "tcp", + // "tcp4", and "tcp6". + BindNetwork string } type SecureServingInfo struct { diff --git a/pkg/genericapiserver/serve.go b/pkg/genericapiserver/serve.go index e595bf2812a..ec120b72bd3 100644 --- a/pkg/genericapiserver/serve.go +++ b/pkg/genericapiserver/serve.go @@ -89,7 +89,7 @@ func (s *GenericAPIServer) serveSecurely(stopCh <-chan struct{}) error { } glog.Infof("Serving securely on %s", s.SecureServingInfo.BindAddress) - s.effectiveSecurePort, err = runServer(secureServer, stopCh) + s.effectiveSecurePort, err = runServer(secureServer, s.SecureServingInfo.BindNetwork, stopCh) return err } @@ -104,19 +104,23 @@ func (s *GenericAPIServer) serveInsecurely(stopCh <-chan struct{}) error { } glog.Infof("Serving insecurely on %s", s.InsecureServingInfo.BindAddress) var err error - s.effectiveInsecurePort, err = runServer(insecureServer, stopCh) + s.effectiveInsecurePort, err = runServer(insecureServer, s.InsecureServingInfo.BindNetwork, stopCh) return err } // runServer listens on the given port, then spawns a go-routine continuously serving // until the stopCh is closed. The port is returned. This function does not block. -func runServer(server *http.Server, stopCh <-chan struct{}) (int, error) { +func runServer(server *http.Server, network string, stopCh <-chan struct{}) (int, error) { if len(server.Addr) == 0 { return 0, errors.New("address cannot be empty") } + if len(network) == 0 { + network = "tcp" + } + // first listen is synchronous (fail early!) - ln, err := net.Listen("tcp", server.Addr) + ln, err := net.Listen(network, server.Addr) if err != nil { return 0, fmt.Errorf("failed to listen on %v: %v", server.Addr, err) }