sr-71/main.go

58 lines
901 B
Go

package main
import (
"fmt"
"io"
"log"
"os"
"sync"
)
func main() {
if len(os.Args) < 2 {
fmt.Fprintf(os.Stderr, "%s <configfile>\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()
}