| package listeners |
| |
| import ( |
| "crypto/tls" |
| "fmt" |
| "net" |
| "os" |
| |
| "github.com/docker/go-connections/sockets" |
| "github.com/sirupsen/logrus" |
| ) |
| |
| // Init creates new listeners for the server. |
| func Init(proto, addr, socketGroup string, tlsConfig *tls.Config) (ls []net.Listener, err error) { |
| switch proto { |
| case "tcp": |
| l, err := sockets.NewTCPSocket(addr, tlsConfig) |
| if err != nil { |
| return nil, err |
| } |
| ls = append(ls, l) |
| case "unix": |
| gid, err := lookupGID(socketGroup) |
| if err != nil { |
| if socketGroup != "" { |
| if socketGroup != defaultSocketGroup { |
| return nil, err |
| } |
| logrus.Warnf("could not change group %s to %s: %v", addr, defaultSocketGroup, err) |
| } |
| gid = os.Getgid() |
| } |
| l, err := sockets.NewUnixSocket(addr, gid) |
| if err != nil { |
| return nil, fmt.Errorf("can't create unix socket %s: %v", addr, err) |
| } |
| ls = append(ls, l) |
| default: |
| return nil, fmt.Errorf("Invalid protocol format: %q", proto) |
| } |
| |
| return |
| } |