From 03bba8e79f1821877a0c1e42204378836ac0662a Mon Sep 17 00:00:00 2001 From: Armon Dadgar Date: Wed, 29 Jan 2014 16:16:47 -0800 Subject: [PATCH] Filling in the readme --- README.md | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c5794cf..bd902f5 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,43 @@ mdns ==== -Simple mDNS client/server library in Golang +Simple mDNS client/server library in Golang. mDNS or Multicast DNS can be +used to discover services on the local network without the use of an authoritative +DNS server. This enables peer-to-peer discovery. It is important to note that many +networks restrict the use of multicasting, which prevents mDNS from functioning. +Notably, multicast cannot be used in any sort of cloud, or shared infrastructure +environment. However it works well in most office, home, or private infrastructure +environments. + +Using the library is very simple, here is an example of publishing a service entry: + + // Setup our service export + host, _ := os.Hostname() + service := &mdns.MDNSService{ + Instance: host, + Service: "_foobar._tcp", + Addr: []byte{127,0,0,1}, + Port: 8000, + Info: "My awesome service", + } + service.Init() + + // Create the mDNS server, defer shutdown + server, _ := mdns.NewServer(&mdns.Config{Zone: service}) + defer server.Shutdown() + + +Doing a lookup for service providers is also very simple: + + // Make a channel for results and start listening + entriesCh := make(chan *mdns.ServiceEntry, 4) + go func() { + for entry := range entriesCh { + fmt.Printf("Got new entry: %v\n", entry) + } + }() + + // Start the lookup + mdns.Lookup("_foobar._tcp", entriesCh) + close(entriesCh) +