The dnssd package

[Tags:bsd3, library]

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


[Skip to Readme]

Properties

Versions 0.1.0.0
Dependencies base (==4.*), transformers (==0.3.*) [details]
License BSD3
Author Maxwell Swadling
Maintainer maxwellswadling@gmail.com
Stability Experimental
Category Network
Home page https://github.com/maxpow4h/dnssd
Source repository head: git clone git://github.com/maxpow4h/dnssd.git
Uploaded Wed Mar 5 10:39:29 UTC 2014 by MaxwellSwadling
Distributions NixOS:0.1.0.0
Downloads 312 total (6 in the last 30 days)
Votes
0 []
Status Docs uploaded by user [build log]
All reported builds failed [all 1 reports]

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for dnssd

Readme for dnssd-0.1.0.0

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.

Install

cabal install dnssd

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

Example

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