This is a complete rewrite of net-mdns-0.0. The major additions are a mDNS responder (thus ability to advertise services) and a DNSSD-compatible high-level API. Only tested on Mac OS X 10.3. Multicast socket options and behaviours vary across different operating systems. It will take some tweaking, I'm sure, so I would appreciate feedback from people with other kinds of systems. Cheers, Sam -- stuff ripped from the on-line documentation -- Where? Homepage:: http://dnssd.rubyforge.org/net-mdns Download:: http://rubyforge.org/frs/?group_id=316 What? An implementation of a multicast DNS (mDNS) responder. mDNS is an extension of hierarchical, unicast DNS to link-local multicast, used to do service discovery and address lookups over local networks. It is most widely known because it is part of Apple's OS X. net-mdns consists of: - Net::DNS::MDNSSD: a high-level API for browsing, resolving, and advertising services using DNS-SD over mDNS that aims to be compatible with DNSSD, see below for more information. - Resolv::MDNS: an extension to the 'resolv' resolver library that adds support for multicast DNS. - Net::DNS::MDNS: the low-level APIs and mDNS responder at the core of Resolv::MDNS and Net::DNS::MDNSSD. net-mdns can be used for: - name to address lookups on local networks - address to name lookups on local networks - discovery of services on local networks - advertisement of services on local networks Example? # Advertise a webrick server over mDNS. require 'webrick' require 'net/dns/mdns-sd' DNSSD = Net::DNS::MDNSSD class HelloServlet < WEBrick::HTTPServlet::AbstractServlet def do_GET(req, resp) resp.body = "hello, world\n" resp['content-type'] = 'text/plain' raise WEBrick::HTTPStatus::OK end end server = WEBrick::HTTPServer.new( :Port => 8080 ) server.mount( '/hello/', HelloServlet ) handle = DNSSD.register("hello", '_http._tcp', 'local', 8080, 'path' => '/hello/') ['INT', 'TERM'].each { |signal| trap(signal) { server.shutdown; handle.stop; } } server.start How does it compare to the DNSSD project? The DNS-SD project at http://dnssd.rubyforge.org is another approach to mDNS and service discovery. DNS-SD is a compiled ruby extension implemented on top of the dns_sd.h APIs published by Apple. These APIs work by contacting a local mDNS daemon (through unix domain sockets) and should be more efficient since they use a daemon written in C by a dedicated team at Apple. Currently, the only thing I'm aware of net-mdns doing that DNS-SD doesn't is integrate into the standard library so that link-local domain names can be used throughout the standard networking classes, and allow querying of arbitrary DNS record types. There is no reason DNS-SD can't do this, it just needs to wrap DNSServiceQueryRecord() and expose it, and that will happen sometime soon. Since net-mdns doesn't do significantly more than DNSSD, why would you be interested in it? The DNS-SD extension requires the dns_sd.h C language APIs for the Apple mDNS daemon. Installing the Apple responder can be quite difficult, and requires a running daemon. It also requires compiling the extension. If you need a pure ruby implementation, or if building DNS-SD turns out to be difficult for you, net-mdns may be useful to you.