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

Version0.1.0.0
Change logNone available
Dependenciesbase (==4.*), transformers (==0.3.*) [details]
LicenseBSD3
AuthorMaxwell Swadling
Maintainermaxwellswadling@gmail.com
StabilityExperimental
CategoryNetwork
Home pagehttps://github.com/maxpow4h/dnssd
Source repositoryhead: git clone git://github.com/maxpow4h/dnssd.git
UploadedWed Mar 5 10:39:29 UTC 2014 by MaxwellSwadling
Downloads221 total (15 in last 30 days)
Votes
0 []
StatusDocs uploaded by user [build log]
All reported builds failed [all 1 reports]

Modules

[Index]

Downloads

Maintainers' corner

For package maintainers and hackage trustees

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:

Doesn't work on yet: