HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Moduleresolv-0.2.0.3Haskell2010

Network.DNS

This module implements an API for accessing the Domain Name Service (DNS) resolver service via the standard libresolv system library on Unix systems.

  • 19 types
  • 1 class
  • 21 values
  • Packageresolv-0.2.0.3
  • Exports41
  • LanguageHaskell2010
  • LicenceGPL-2.0-or-later
  • SourceDNS.hs

High level API

valuequeryA :: Name -> IO [(TTL, IPv4)]
#

Query A record (see RFC 1035, section 3.4.1).

This query returns only exact matches (modulo foldCaseName). E.g. in case of CNAME responses even if the answer section would contain A records for the hostnames pointed to by the CNAME. You can use query if you need more control.

Example1 expression
queryA (Name "www.google.com")[(TTL 72,IPv4 0xd83acde4)]
valuequeryAAAA :: Name -> IO [(TTL, IPv6)]
#

Query AAAA records (see RFC 3596).

This query returns only exact matches (modulo foldCaseName). E.g. in case of CNAME responses even if the answer section would contain A records for the hostnames pointed to by the CNAME. You can use query if you need more control.

Example1 expression
queryAAAA (Name "www.google.com")[(TTL 299,IPv6 0x2a0014504001081e 0x2004)]
valuequerySRV :: Name -> IO [(TTL, SRV Name)]
#

Query SRV records (see RFC 2782).

Example1 expression
querySRV (Name "_imap._tcp.gmail.com")[(TTL 21599,SRV {srvPriority = 0, srvWeight = 0, srvPort = 0, srvTarget = Name "."})]
valuequeryTXT :: Name -> IO [(TTL, [CharStr])]
#

Query TXT records (see RFC 1035, section 3.3.14).

Example1 expression
queryTXT (Name "_mirrors.hackage.haskell.org")[(TTL 299,["0.urlbase=http://hackage.fpcomplete.com/",           "1.urlbase=http://objects-us-west-1.dream.io/hackage-mirror/"])]

Mid-level API

2 declarations
valuequery :: IsLabels n => Class -> n -> TypeSym -> IO (Msg n)
#

Send a query via res_query(3) and decode its response into a Msg

Throws DnsException in case of resolving or encoding/decoding errors. May throw other IO exceptions in case of network errors.

Example
Example1 expression
query classIN (Name "_mirrors.hackage.haskell.org") TypeTXTJust (Msg{msgHeader = MsgHeader{mhId    = 56694,                                mhFlags = MsgHeaderFlags{mhQR = IsResponse, mhOpcode = 0, mhAA = False,                                                         mhTC = False, mhRD = True, mhRA = True, mhZ = False,                                                         mhAD = False, mhCD = False, mhRCode = 0},                                mhQDCount = 1, mhANCount = 1, mhNSCount = 0, mhARCount = 1},          msgQD = [MsgQuestion (Name "_mirrors.hackage.haskell.org.") (Type 16) (Class 1)],          msgAN = [MsgRR{rrName  = Name "_mirrors.hackage.haskell.org.",                         rrClass = Class 1, rrTTL = TTL 299,                         rrData  = RDataTXT ["0.urlbase=http://hackage.fpcomplete.com/",                                             "1.urlbase=http://objects-us-west-1.dream.io/hackage-mirror/"]}],          msgNS = [],          msgAR = [MsgRR{rrName = Name ".", rrClass = Class 512, rrTTL = TTL 32768, rrData = RDataOPT ""}]      })
datadata DnsException
#

Exception thrown in case of errors while resolving or encoding/decoding into a Msg.

Constructors

Instances3Eq, Show, Exception

Low-level API

7 declarations
valueresIsReentrant :: Bool
#

Whether the reentrant DNS resolver C API (e.g. res_nquery(3), res_nsend(3)) is being used.

If this this False, then as a fall-back res_query(3)/res_send(3) are used, protected by a global mutex.

Types

0 declarations

Basic types

Names/Labels

typetype Label = ByteString
#

A DNS Label

Must be non-empty and at most 63 octets.

newtypenewtype Name
#

<domain-name> as per RFC 1035, section 3.3.

A domain-name represented as a series of labels separated by dots.

See also Labels for list-based representation.

NOTE: The Labels type is able to properly represent domain names whose components contain dots which the Name representation cannot.

Constructors

Instances5Eq, Ord, Read, Show, IsLabels
  • Eq NameDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Ord NameDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Read NameDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Show NameDefined in resolv-0.2.0.3 · Network.DNS.Message
  • IsLabels NameDefined in resolv-0.2.0.3 · Network.DNS.Message
valuecaseFoldName :: Name -> Name
#

Normalise Name

This function case folds Names as described in in RFC 4343, section 3 by subtracting 0x20 from all octets in the inclusive range [0x61..0x7A] (i.e. mapping [a..z] to [A..Z]).

This operation is idempotent.

Character strings

newtypenewtype CharStr
#

<character-string> as per RFC 1035, section 3.3.

A sequence of up to 255 octets

The limit of 255 octets is caused by the encoding which uses by a prefixed octet denoting the length.

Constructors

Instances6Eq, Ord, Read, Show, IsString, Binary
  • Eq CharStrDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Ord CharStrDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Read CharStrDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Show CharStrDefined in resolv-0.2.0.3 · Network.DNS.Message
  • IsString CharStrDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary CharStrDefined in resolv-0.2.0.3 · Network.DNS.Message

IP addresses

datadata IPv4
#

An IPv4 address

The IP address is represented in network order, i.e. 127.0.0.1 is represented as (IPv4 0x7f000001).

Constructors

Instances5Eq, Ord, Read, Show, Binary
  • Eq IPv4Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Ord IPv4Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Read IPv4Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Show IPv4Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary IPv4Defined in resolv-0.2.0.3 · Network.DNS.Message
datadata IPv6
#

An IPv6 address

The IP address is represented in network order, i.e. 2606:2800:220:1:248:1893:25c8:1946 is represented as (IPv6 0x2606280002200001 0x248189325c81946).

Constructors

Instances5Eq, Ord, Read, Show, Binary
  • Eq IPv6Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Ord IPv6Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Read IPv6Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Show IPv6Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary IPv6Defined in resolv-0.2.0.3 · Network.DNS.Message
valuearpaIPv6 :: IPv6 -> Name
#

Convert IPv4 address to ip6.arpa. Name (see RFC 3596, section 2.5).

Example1 expression
arpaIPv6 (IPv6 0x2001486048600000 0x8844)Name "4.4.8.8.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.6.8.4.0.6.8.4.1.0.0.2.ip6.arpa."

RR TTL & Class

newtypenewtype TTL
#

Cache time-to-live expressed in seconds

Constructors

Instances5Eq, Ord, Read, Show, Binary
  • Eq TTLDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Ord TTLDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Read TTLDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Show TTLDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary TTLDefined in resolv-0.2.0.3 · Network.DNS.Message
newtypenewtype Class
#

DNS CLASS code as per RFC 1035, section 3.2.4

The most commonly used value is classIN.

Constructors

Instances5Eq, Ord, Read, Show, Binary
  • Eq ClassDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Ord ClassDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Read ClassDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Show ClassDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary ClassDefined in resolv-0.2.0.3 · Network.DNS.Message

Message types

newtypenewtype Type
#

Raw DNS record type code

See also TypeSym

Constructors

Instances5Eq, Ord, Read, Show, Binary
  • Eq TypeDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Ord TypeDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Read TypeDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Show TypeDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary TypeDefined in resolv-0.2.0.3 · Network.DNS.Message
datadata TypeSym
#
Instances6Bounded, Enum, Eq, Ord, Read, Show
  • Bounded TypeSymDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Enum TypeSymDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Eq TypeSymDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Ord TypeSymDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Read TypeSymDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Show TypeSymDefined in resolv-0.2.0.3 · Network.DNS.Message

Messages

datadata Msg l
#

Represents a DNS message as per RFC 1035

Constructors

Instances6Functor, Foldable, Traversable, Read, Show, Binary
  • Functor MsgDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Foldable MsgDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Traversable MsgDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Read l => Read (Msg l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Show l => Show (Msg l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary l => Binary (Msg l)Defined in resolv-0.2.0.3 · Network.DNS.Message
datadata QR
#

Encodes whether message is a query or a response

Instances3Eq, Read, Show
  • Eq QRDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Read QRDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Show QRDefined in resolv-0.2.0.3 · Network.DNS.Message
datadata MsgQuestion l
#

DNS message header section as per RFC 1035, section 4.1.2

Constructors

Instances7Functor, Foldable, Traversable, Eq, Read, Show, …
datadata MsgRR l
#

DNS resource record section as per RFC 1035, section 4.1.3

Constructors

Instances7Functor, Foldable, Traversable, Eq, Read, Show, …
  • Functor MsgRRDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Foldable MsgRRDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Traversable MsgRRDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Eq l => Eq (MsgRR l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Read l => Read (MsgRR l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Show l => Show (MsgRR l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary l => Binary (MsgRR l)Defined in resolv-0.2.0.3 · Network.DNS.Message
datadata RData l
#
Instances6Functor, Foldable, Traversable, Eq, Read, Show
  • Functor RDataDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Foldable RDataDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Traversable RDataDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Eq l => Eq (RData l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Read l => Read (RData l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Show l => Show (RData l)Defined in resolv-0.2.0.3 · Network.DNS.Message
datadata SRV l
#

SRV Record data as per RFC 2782

Instances7Functor, Foldable, Traversable, Eq, Read, Show, …
  • Functor SRVDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Foldable SRVDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Traversable SRVDefined in resolv-0.2.0.3 · Network.DNS.Message
  • Eq l => Eq (SRV l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Read l => Read (SRV l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Show l => Show (SRV l)Defined in resolv-0.2.0.3 · Network.DNS.Message
  • Binary l => Binary (SRV l)Defined in resolv-0.2.0.3 · Network.DNS.Message