package main import ( "context" "log/slog" "os" "os/signal" "syscall" "sdns/internal/server" ) func main() { logger := slog.New(slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{ Level: slog.LevelInfo, })) slog.SetDefault(logger) udp := os.Getenv("SDNS_LISTEN_UDP") if udp == "" { udp = ":5353" } tcp := os.Getenv("SDNS_LISTEN_TCP") if tcp == "" { tcp = ":5353" } doh := os.Getenv("SDNS_LISTEN_DOH") if doh == "" { doh = ":8443" } ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer stop() srv, err := server.New(udp, tcp, doh, logger) if err != nil { logger.Error("create server failed", "err", err) os.Exit(1) } defer srv.Close() logger.Info("sdns starting", "udp", udp, "tcp", tcp, "doh", doh) if err := srv.Run(ctx); err != nil && err != context.Canceled { logger.Error("server stopped with error", "err", err) os.Exit(1) } logger.Info("sdns stopped cleanly") }