DNS service discovery bindings https://github.com/maxpow4h/dnssd

Latest on Hackage:

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD3 licensed by Maxwell Swadling

DNS Service Discovery Haskell Bindings

dnssd provides Haskell bindings to Multicast DNS (mDNS) and DNS Service Discovery (DNS-SD). Also known as Bonjour or Avahi.

WARNING: There is currently a bug that causes the C code to get stuck in a loop when used in a large network in GHCi. This is an experimental library.


cabal install dnssd

On Linux you need the libavahi-compat-libdnssd-dev package installed as well.


slide-simple.hs is a simple example of displaying jpegs to an Apple TV.

To find all local web servers.

import Network.DNSSD
main = do
  servers <- dnsBrowse "_http._tcp"
  putStrLn . show $ servers

This should look something like this:

  SRecord {deviceName = "Maxwell\8217s Server",
           serviceName = "_http._tcp.", deviceDomain = "local."}
, SRecord {deviceName = "Jenkins",
           serviceName = "_http._tcp.", deviceDomain = "local."}

Find just one and then resolve it’s IP and port.

import Network.DNSSD

dnsAny :: String -> IO (Maybe SResolved)
dnsAny s = do
  things <- dnsBrowse s
  if null things
    then return Nothing
    else dnsResolve $ head things

main = do
  web <- dnsAny "_http._tcp"
  print web

Cross Platform Status

Works on:

  • Mac
  • Linux

Doesn’t work on yet:

  • Windows
Depends on 2 packages:
Used by 1 package:
comments powered byDisqus