aboutsummaryrefslogtreecommitdiffstats
path: root/server.go
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-12-22 16:21:23 +0100
committerMartin Polden <mpolden@mpolden.no>2019-12-22 18:01:40 +0100
commit1578925c557dab6b6c25af657771742c45dd9303 (patch)
treec15b3dace22fd7901ab2c2d0ed7eec2407668e11 /server.go
parenteff1bca2529f448b2bc6435dc56dc8c885065b54 (diff)
Extract signal handling to separate package
Diffstat (limited to 'server.go')
-rw-r--r--server.go37
1 files changed, 4 insertions, 33 deletions
diff --git a/server.go b/server.go
index 42b96c9..29c7c6e 100644
--- a/server.go
+++ b/server.go
@@ -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)
}