Ver código fonte

Merge pull request #16826 from LK4D4/refactor_listenfd

Refactor listenFD function
Vincent Demeester 9 anos atrás
pai
commit
caf7d83c67
1 arquivos alterados com 19 adições e 9 exclusões
  1. 19 9
      api/server/server_unix.go

+ 19 - 9
api/server/server_unix.go

@@ -8,6 +8,7 @@ import (
 	"net/http"
 	"strconv"
 
+	"github.com/Sirupsen/logrus"
 	"github.com/docker/docker/pkg/sockets"
 	"github.com/docker/libnetwork/portallocator"
 
@@ -90,24 +91,33 @@ func listenFD(addr string) ([]net.Listener, error) {
 		return nil, err
 	}
 
-	if listeners == nil || len(listeners) == 0 {
+	if len(listeners) == 0 {
 		return nil, fmt.Errorf("No sockets found")
 	}
 
 	// default to all fds just like unix:// and tcp://
-	if addr == "" {
-		addr = "*"
+	if addr == "" || addr == "*" {
+		return listeners, nil
 	}
 
-	fdNum, _ := strconv.Atoi(addr)
+	fdNum, err := strconv.Atoi(addr)
+	if err != nil {
+		return nil, fmt.Errorf("failed to parse systemd address, should be number: %v", err)
+	}
 	fdOffset := fdNum - 3
-	if (addr != "*") && (len(listeners) < int(fdOffset)+1) {
+	if len(listeners) < int(fdOffset)+1 {
 		return nil, fmt.Errorf("Too few socket activated files passed in")
 	}
-
-	if addr == "*" {
-		return listeners, nil
+	if listeners[fdOffset] == nil {
+		return nil, fmt.Errorf("failed to listen on systemd activated file at fd %d", fdOffset+3)
+	}
+	for i, ls := range listeners {
+		if i == fdOffset || ls == nil {
+			continue
+		}
+		if err := ls.Close(); err != nil {
+			logrus.Errorf("Failed to close systemd activated file at fd %d: %v", fdOffset+3, err)
+		}
 	}
-
 	return []net.Listener{listeners[fdOffset]}, nil
 }