diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-12-22 16:21:23 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-12-22 18:01:40 +0100 |
commit | 1578925c557dab6b6c25af657771742c45dd9303 (patch) | |
tree | c15b3dace22fd7901ab2c2d0ed7eec2407668e11 /server.go | |
parent | eff1bca2529f448b2bc6435dc56dc8c885065b54 (diff) |
Extract signal handling to separate package
Diffstat (limited to 'server.go')
-rw-r--r-- | server.go | 37 |
1 files changed, 4 insertions, 33 deletions
@@ -7,9 +7,7 @@ import ( "net/http" "net/url" "os" - "os/signal" "sync" - "syscall" "time" "github.com/cenkalti/backoff/v3" @@ -35,7 +33,6 @@ type Server struct { proxy *dns.Proxy ticker *time.Ticker done chan bool - signal chan os.Signal mu sync.RWMutex httpClient *http.Client } @@ -44,7 +41,6 @@ type Server struct { func NewServer(logger *log.Logger, config Config) (*Server, error) { server := &Server{ Config: config, - signal: make(chan os.Signal, 1), done: make(chan bool, 1), logger: logger, httpClient: &http.Client{Timeout: 10 * time.Second}, @@ -55,8 +51,6 @@ func NewServer(logger *log.Logger, config Config) (*Server, error) { server.ticker = time.NewTicker(t) go server.reloadHosts() } - signal.Notify(server.signal) - go server.readSignal() // Configure proxy var err error @@ -133,29 +127,6 @@ func nonFqdn(s string) string { return s } -func (s *Server) readSignal() { - for { - select { - case <-s.done: - signal.Stop(s.signal) - return - case sig := <-s.signal: - switch sig { - case syscall.SIGHUP: - s.logger.Printf("received signal %s: reloading filters", sig) - s.loadHosts() - case syscall.SIGTERM, syscall.SIGINT: - s.logger.Printf("received signal %s: shutting down", sig) - if err := s.Close(); err != nil { - s.logger.Printf("close failed: %s", err) - } - default: - s.logger.Printf("received signal %s: ignoring", sig) - } - } - } -} - func (s *Server) reloadHosts() { for { select { @@ -206,14 +177,14 @@ func (s *Server) loadHosts() { s.logger.Printf("loaded %d hosts in total", len(hs)) } +// Reload reloads the configuration of this server +func (s *Server) Reload() { s.loadHosts() } + // Close terminates all active operations and shuts down the DNS server. func (s *Server) Close() error { if s.ticker != nil { s.done <- true } - if s.signal != nil { - s.done <- true - } if s.proxy != nil { return s.proxy.Close() } @@ -262,6 +233,6 @@ func (s *Server) hijack(r *dns.Request) *dns.Reply { // ListenAndServe starts a server on configured address and protocol. func (s *Server) ListenAndServe() error { - s.logger.Printf("listening on %s [%s]", s.Config.DNS.Listen, s.Config.DNS.Protocol) + s.logger.Printf("dns server listening on %s [%s]", s.Config.DNS.Listen, s.Config.DNS.Protocol) return s.proxy.ListenAndServe(s.Config.DNS.Listen, s.Config.DNS.Protocol) } |