aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-04-09 22:53:39 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2016-04-09 22:53:39 +0100
commitdb98cd4e4bced5a383ae2914f438617bcea28f73 (patch)
tree8cd82c3f36358548e002e21099717ef054b03996
parent49f994fa805f354b32669dcf4455b915a814c1f0 (diff)
downloadcoredns-db98cd4e4bced5a383ae2914f438617bcea28f73.tar.gz
coredns-db98cd4e4bced5a383ae2914f438617bcea28f73.tar.zst
coredns-db98cd4e4bced5a383ae2914f438617bcea28f73.zip
Use *dns.Server (#99)
This does not fix the reload issue, but will give us flexibility to access the packetConn and listener to make this all work.
-rw-r--r--core/sigtrap_posix.go2
-rw-r--r--server/server.go14
2 files changed, 13 insertions, 3 deletions
diff --git a/core/sigtrap_posix.go b/core/sigtrap_posix.go
index ba24ff4b6..5ba5fcd1b 100644
--- a/core/sigtrap_posix.go
+++ b/core/sigtrap_posix.go
@@ -53,7 +53,7 @@ func trapSignalsPosix() {
caddyfileMu.Lock()
if caddyfile == nil {
// Hmm, did spawing process forget to close stdin? Anyhow, this is unusual.
- log.Println("[ERROR] SIGUSR1: no Caddyfile to reload (was stdin left open?)")
+ log.Println("[ERROR] SIGUSR1: no Corefile to reload (was stdin left open?)")
caddyfileMu.Unlock()
continue
}
diff --git a/server/server.go b/server/server.go
index 159aff39b..1816fd1dc 100644
--- a/server/server.go
+++ b/server/server.go
@@ -31,6 +31,7 @@ import (
type Server struct {
Addr string // Address we listen on
mux *dns.ServeMux
+ server [2]*dns.Server
tls bool // whether this server is serving all HTTPS hosts or not
TLSConfig *tls.Config
OnDemandTLS bool // whether this server supports on-demand TLS (load certs at handshake-time)
@@ -159,11 +160,13 @@ func (s *Server) ListenAndServe() error {
// return the error from the udp listener, disregarding whatever
// happenend to the tcp one.
go func() {
- dns.ListenAndServe(s.Addr, "tcp", s.mux)
+ s.server[0] = &dns.Server{Addr: s.Addr, Net: "tcp", Handler: s.mux}
+ s.server[0].ListenAndServe()
}()
close(s.startChan) // unblock anyone waiting for this to start listening
- return dns.ListenAndServe(s.Addr, "udp", s.mux)
+ s.server[1] = &dns.Server{Addr: s.Addr, Net: "udp", Handler: s.mux}
+ return s.server[1].ListenAndServe()
}
// setup prepares the server s to begin listening; it should be
@@ -242,6 +245,13 @@ func (s *Server) Stop() (err error) {
err = s.listener.Close()
}
s.listenerMu.Unlock()
+ // Don't know if the above is still valid.
+
+ for _, s1 := range s.server {
+ if err := s1.Shutdown(); err != nil {
+ return err
+ }
+ }
return
}