summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/main.go b/main.go
new file mode 100644
index 0000000..5d9e526
--- /dev/null
+++ b/main.go
@@ -0,0 +1,40 @@
+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,
+ }))
+
+ addr := os.Getenv("SDNS_LISTEN")
+ if addr == "" {
+ addr = ":5353"
+ }
+
+ ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
+ defer stop()
+
+ srv, err := server.New(addr, logger)
+ if err != nil {
+ logger.Error("create server failed", "err", err)
+ os.Exit(1)
+ }
+ defer srv.Close()
+
+ logger.Info("sdns starting", "addr", addr)
+
+ 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")
+}