dnssd: DNS service discovery bindings

[ bsd3, library, network ] [ Propose Tags ]

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


[Skip to Readme]

Modules

[Index]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0
Dependencies base (>=4 && <5), transformers (>=0.3 && <0.4) [details]
License BSD-3-Clause
Author Maxwell Swadling
Maintainer maxwellswadling@gmail.com
Category Network
Home page https://github.com/maxpow4h/dnssd
Source repo head: git clone git://github.com/maxpow4h/dnssd.git
Uploaded by MaxwellSwadling at 2014-03-05T10:39:29Z
Distributions
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 1160 total (4 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user [build log]
All reported builds failed [all 1 reports]

Readme for dnssd-0.1.0.0

[back to package description]

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