From 22c3ff9f608a3b4d13e91e76421f9fd0fd203995 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 20 Nov 2014 16:36:13 +0000 Subject: [PATCH 1/2] Set 'Unsafe' flag to allow dns.Server to handle responses --- nameserver/mdns_client.go | 2 +- nameserver/mdns_server_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nameserver/mdns_client.go b/nameserver/mdns_client.go index 9bf9dda2..96becfcf 100644 --- a/nameserver/mdns_client.go +++ b/nameserver/mdns_client.go @@ -85,7 +85,7 @@ func (c *MDNSClient) Start(ifi *net.Interface) error { } } - c.server = &dns.Server{Listener: nil, PacketConn: multicast, Handler: dns.HandlerFunc(handleMDNS)} + c.server = &dns.Server{Unsafe: true, PacketConn: multicast, Handler: dns.HandlerFunc(handleMDNS)} go c.server.ActivateAndServe() queryChan := make(chan *MDNSInteraction, MailboxSize) diff --git a/nameserver/mdns_server_test.go b/nameserver/mdns_server_test.go index 51fd5f14..3f55ec02 100644 --- a/nameserver/mdns_server_test.go +++ b/nameserver/mdns_server_test.go @@ -61,7 +61,7 @@ func TestServerSimpleQuery(t *testing.T) { } } - server := &dns.Server{Listener: nil, PacketConn: multicast, Handler: dns.HandlerFunc(handleMDNS)} + server := &dns.Server{Unsafe: true, PacketConn: multicast, Handler: dns.HandlerFunc(handleMDNS)} go server.ActivateAndServe() defer server.Shutdown() From 5cc24fe55e5dfde809fd5d4e77c10d1458a8f063 Mon Sep 17 00:00:00 2001 From: Bryan Boreham Date: Thu, 20 Nov 2014 16:37:25 +0000 Subject: [PATCH 2/2] Rename 'server' to 'listener' to better match how it is used --- nameserver/mdns_client.go | 10 ++++++---- nameserver/mdns_server_test.go | 6 +++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/nameserver/mdns_client.go b/nameserver/mdns_client.go index 96becfcf..7acf45a5 100644 --- a/nameserver/mdns_client.go +++ b/nameserver/mdns_client.go @@ -48,7 +48,9 @@ type inflightQuery struct { } type MDNSClient struct { - server *dns.Server + // note unorthodox use of 'Server' class in client logic - using it to + // listen on a multicast socket and call callback whenever a message comes in. + listener *dns.Server conn *net.UDPConn addr *net.UDPAddr inflight map[string]*inflightQuery @@ -85,8 +87,8 @@ func (c *MDNSClient) Start(ifi *net.Interface) error { } } - c.server = &dns.Server{Unsafe: true, PacketConn: multicast, Handler: dns.HandlerFunc(handleMDNS)} - go c.server.ActivateAndServe() + c.listener = &dns.Server{Unsafe: true, PacketConn: multicast, Handler: dns.HandlerFunc(handleMDNS)} + go c.listener.ActivateAndServe() queryChan := make(chan *MDNSInteraction, MailboxSize) c.queryChan = queryChan @@ -177,7 +179,7 @@ func (c *MDNSClient) queryLoop(queryChan <-chan *MDNSInteraction) { } switch query.code { case CShutdown: - c.server.Shutdown() + c.listener.Shutdown() terminate = true case CSendQuery: c.handleSendQuery(query.payload.(mDNSQueryInfo)) diff --git a/nameserver/mdns_server_test.go b/nameserver/mdns_server_test.go index 3f55ec02..fbab25ae 100644 --- a/nameserver/mdns_server_test.go +++ b/nameserver/mdns_server_test.go @@ -61,9 +61,9 @@ func TestServerSimpleQuery(t *testing.T) { } } - server := &dns.Server{Unsafe: true, PacketConn: multicast, Handler: dns.HandlerFunc(handleMDNS)} - go server.ActivateAndServe() - defer server.Shutdown() + listener := &dns.Server{Unsafe: true, PacketConn: multicast, Handler: dns.HandlerFunc(handleMDNS)} + go listener.ActivateAndServe() + defer listener.Shutdown() time.Sleep(100 * time.Millisecond) // Allow for server to get going