zettio/weave#362 - implement a graceful shutdown
This commit is contained in:
1 parent
c1f9c8bc10
commit
c81769cc9a
1 file changed
+20
-4
+20
-4
@@ -25,7 +25,9 @@ type DNSServer struct {
|
||||
zone Zone
|
||||
iface *net.Interface
|
||||
udpPort int
|
||||
udpSrv *dns.Server
|
||||
tcpPort int
|
||||
tcpSrv *dns.Server
|
||||
}
|
||||
|
||||
// Creates a new DNS server with a given config
|
||||
@@ -73,23 +75,37 @@ func (s *DNSServer) Start() error {
|
||||
err = mdnsServer.Start(s.iface)
|
||||
checkFatal(err)
|
||||
|
||||
udpAddress := fmt.Sprintf(":%d", s.udpPort)
|
||||
s.udpSrv = &dns.Server{Addr: udpAddress, Net: "udp", Handler: LocalServeMux}
|
||||
tcpAddress := fmt.Sprintf(":%d", s.tcpPort)
|
||||
s.tcpSrv = &dns.Server{Addr: tcpAddress, Net: "tcp", Handler: LocalServeMux}
|
||||
|
||||
go func() {
|
||||
udpAddress := fmt.Sprintf(":%d", s.udpPort)
|
||||
Info.Printf("Listening for DNS on %s (UDP)", udpAddress)
|
||||
err = dns.ListenAndServe(udpAddress, "udp", LocalServeMux)
|
||||
err = s.udpSrv.ListenAndServe()
|
||||
checkFatal(err)
|
||||
}()
|
||||
|
||||
go func() {
|
||||
tcpAddress := fmt.Sprintf(":%d", s.tcpPort)
|
||||
Info.Printf("Listening for DNS on %s (TCP)", tcpAddress)
|
||||
err = dns.ListenAndServe(tcpAddress, "tcp", LocalServeMux)
|
||||
err = s.tcpSrv.ListenAndServe()
|
||||
checkFatal(err)
|
||||
}()
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Perform a graceful shutdown
|
||||
func (s *DNSServer) Stop() error {
|
||||
if err := s.tcpSrv.Shutdown(); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.udpSrv.Shutdown(); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *DNSServer) queryHandler(lookups []Lookup) dns.HandlerFunc {
|
||||
return func(w dns.ResponseWriter, r *dns.Msg) {
|
||||
q := r.Question[0]
|
||||
|
||||
Reference in new issue
Block a user