From 419138ec6a75a43ba1e08148f8419f8d47374934 Mon Sep 17 00:00:00 2001 From: Alvaro Saurin Date: Fri, 20 Feb 2015 16:40:34 +0100 Subject: [PATCH] zettio/weave#362 - use a WaitGroup for the TCP/UDP goroutines: otherwise, WeaveDNS server just quits --- nameserver/server.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/nameserver/server.go b/nameserver/server.go index 1291a06d..c2a680e8 100644 --- a/nameserver/server.go +++ b/nameserver/server.go @@ -5,6 +5,7 @@ import ( "github.com/miekg/dns" . "github.com/zettio/weave/common" "net" + "sync" ) const ( @@ -41,6 +42,8 @@ func NewDNSServer(config *dns.ClientConfig, zone Zone, iface *net.Interface, por // Start the DNS server func (s *DNSServer) Start() error { + Info.Printf("WeaveDNS server starting...") + mdnsClient, err := NewMDNSClient() CheckFatal(err) @@ -72,18 +75,31 @@ func (s *DNSServer) Start() error { s.udpSrv = &dns.Server{Addr: address, Net: "udp", Handler: mux(&dns.Client{Net: "udp", UDPSize: UDPBufSize})} s.tcpSrv = &dns.Server{Addr: address, Net: "tcp", Handler: mux(&dns.Client{Net: "tcp"})} + wg := new(sync.WaitGroup) + wg.Add(2) + go func() { - Info.Printf("Listening for DNS on %s (UDP)", address) + defer wg.Done() + + Debug.Printf("Listening for DNS on %s (UDP)", address) err = s.udpSrv.ListenAndServe() CheckFatal(err) + Debug.Printf("DNS UDP server exiting...") }() go func() { - Info.Printf("Listening for DNS on %s (TCP)", address) + defer wg.Done() + + Debug.Printf("Listening for DNS on %s (TCP)", address) err = s.tcpSrv.ListenAndServe() CheckFatal(err) + Debug.Printf("DNS TCP server exiting...") }() + // Waiting for all goroutines to finish (otherwise they die as main routine dies) + wg.Wait() + + Info.Printf("WeaveDNS server exiting...") return nil }