// newServer sets up the required serverClosers and does protocol specific checking. func (s *Server) newServer(proto, addr string) ([]serverCloser, error) { var ( ls []net.Listener ) switch proto { case "tcp": l, err := sockets.NewTcpSocket(addr, s.cfg.TLSConfig, s.start) if err != nil { return nil, err } ls = append(ls, l) case "unix": l, err := sockets.NewUnixSocket(addr, s.cfg.SocketGroup, s.start) if err != nil { return nil, err } ls = append(ls, l) default: return nil, fmt.Errorf("Invalid protocol format: %q", proto) } var res []serverCloser for _, l := range ls { res = append(res, &HttpServer{ &http.Server{ Addr: addr, Handler: s.router, }, l, }) } return res, nil }
// newServer sets up the required serverCloser and does protocol specific checking. func (s *Server) newServer(proto, addr string) (serverCloser, error) { var ( err error l net.Listener ) switch proto { case "fd": ls, err := systemd.ListenFD(addr) if err != nil { return nil, err } chErrors := make(chan error, len(ls)) // We don't want to start serving on these sockets until the // daemon is initialized and installed. Otherwise required handlers // won't be ready. <-s.start // Since ListenFD will return one or more sockets we have // to create a go func to spawn off multiple serves for i := range ls { listener := ls[i] go func() { httpSrv := http.Server{Handler: s.router} chErrors <- httpSrv.Serve(listener) }() } for i := 0; i < len(ls); i++ { if err := <-chErrors; err != nil { return nil, err } } return nil, nil case "tcp": l, err = s.initTcpSocket(addr) if err != nil { return nil, err } case "unix": if l, err = sockets.NewUnixSocket(addr, s.cfg.SocketGroup, s.start); err != nil { return nil, err } default: return nil, fmt.Errorf("Invalid protocol format: %q", proto) } return &HttpServer{ &http.Server{ Addr: addr, Handler: s.router, }, l, }, nil }
func newUnixListener( volumeDriverName string, group string, start <-chan struct{}, ) (net.Listener, string, error) { path, err := fullSocketAddress(volumeDriverName) if err != nil { return nil, "", err } listener, err := sockets.NewUnixSocket(path, group, start) if err != nil { return nil, "", err } return listener, path, nil }
// newServer sets up the required serverClosers and does protocol specific checking. func (s *Server) newServer(proto, addr string) ([]serverCloser, error) { var ( err error ls []net.Listener ) switch proto { case "fd": ls, err = listenFD(addr) if err != nil { return nil, err } // We don't want to start serving on these sockets until the // daemon is initialized and installed. Otherwise required handlers // won't be ready. <-s.start case "tcp": l, err := s.initTCPSocket(addr) if err != nil { return nil, err } ls = append(ls, l) case "unix": l, err := sockets.NewUnixSocket(addr, s.cfg.SocketGroup, s.start) if err != nil { return nil, err } ls = append(ls, l) default: return nil, fmt.Errorf("Invalid protocol format: %q", proto) } var res []serverCloser for _, l := range ls { res = append(res, &HTTPServer{ &http.Server{ Addr: addr, Handler: s.CreateMux(), }, l, }) } return res, nil }
// newServer sets up the required HTTPServers and does protocol specific checking. // newServer does not set any muxers, you should set it later to Handler field func (s *Server) newServer(proto, addr string) ([]*HTTPServer, error) { var ( err error ls []net.Listener ) switch proto { case "fd": ls, err = listenFD(addr, s.cfg.TLSConfig) if err != nil { return nil, err } case "tcp": l, err := s.initTCPSocket(addr) if err != nil { return nil, err } ls = append(ls, l) case "unix": l, err := sockets.NewUnixSocket(addr, s.cfg.SocketGroup) 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) } var res []*HTTPServer for _, l := range ls { res = append(res, &HTTPServer{ &http.Server{ Addr: addr, }, l, }) } return res, nil }