package main import ( "fmt" "io" "log" "os" "sync" ) func main() { if len(os.Args) < 2 { fmt.Fprintf(os.Stderr, "%s \n", os.Args[0]) os.Exit(1) } var configfile io.ReadCloser if os.Args[1] == "-" { configfile = os.Stdin } else { var err error configfile, err = os.Open(os.Args[1]) if err != nil { log.Fatal(err) } } config, err := Parse(configfile) if err != nil { log.Fatal(err) } _, _, _, errlog := Loggers(config) servers, err := buildServers(config) if err != nil { _ = errlog.Log("msg", "error building servers", "err", err) os.Exit(1) } if err := privdrop(config); err != nil { _ = errlog.Log("msg", "failed to drop privileges", "err", err) os.Exit(1) } wg := &sync.WaitGroup{} wg.Add(len(servers)) for i := range servers { server := servers[i] go func() { defer wg.Done() _ = server.Serve() }() } wg.Wait() }