func handleListners(cl chan net.Listener) { for v := range cl { go func(l net.Listener) { srv := new(FastCGIServer) fcgi.Serve(l, srv) }(v) } }
func handleListners(cl chan net.Listener) { for v := range cl { go func(l net.Listener) { switch reflect.ValueOf(l).Elem().FieldByName("Name").String() { case "fcgi": srv := new(FastCGIServer) fcgi.Serve(l, srv) case "http": handler := new(HTTPServer) http.Serve(l, handler) case "tcp_sock", "tcp_port": for { conn, err := l.Accept() if err != nil { // gozd.ErrorAlreadyStopped may occur when shutdown/reload log.Println("accept error: ", err) break } go serveTCP(conn) } case "https": handler := new(HTTPServer) srv := &http.Server{Handler: handler} config := &tls.Config{} if srv.TLSConfig != nil { *config = *srv.TLSConfig } if config.NextProtos == nil { config.NextProtos = []string{"http/1.1"} } var err error config.Certificates = make([]tls.Certificate, 1) config.Certificates[0], err = tls.LoadX509KeyPair(certFile, keyFile) if err != nil { log.Println("ssl cert has problem:", err) return } tlsListener := tls.NewListener(l, config) srv.Serve(tlsListener) } }(v) } }