1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
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")
}
|