dns-4.0.1: DNS library in Haskell

Safe Haskell | None
Language | Haskell2010

Network.DNS.Resolver

Contents

- Configuration for resolver
  - Accessors
  - Specifying DNS servers
  - Configuring cache
- Intermediate data type for resolver
- Type and function for resolver

Description

Resolver related data types.

Synopsis

- data ResolvConf
- defaultResolvConf :: ResolvConf
- resolvInfo :: ResolvConf -> FileOrNumericHost
- resolvTimeout :: ResolvConf -> Int
- resolvRetry :: ResolvConf -> Int
- resolvConcurrent :: ResolvConf -> Bool
- resolvCache :: ResolvConf -> Maybe CacheConf
- resolvQueryControls :: ResolvConf -> QueryControls
- data FileOrNumericHost
  - = RCFilePath FilePath
  - | RCHostName HostName
  - | RCHostNames [HostName]
  - | RCHostPort HostName PortNumber
- data CacheConf
- defaultCacheConf :: CacheConf
- maximumTTL :: CacheConf -> TTL
- pruningDelay :: CacheConf -> Int
- data ResolvSeed
- makeResolvSeed :: ResolvConf -> IO ResolvSeed
- data Resolver
- withResolver :: ResolvSeed -> (Resolver -> IO a) -> IO a
- withResolvers :: [ResolvSeed] -> ([Resolver] -> IO a) -> IO a

# Configuration for resolver

data ResolvConf Source #

Type for resolver configuration. Use `defaultResolvConf` to create a new value.

An example to use Google's public DNS cache instead of resolv.conf:

    >>> let conf = defaultResolvConf { resolvInfo = RCHostName "8.8.8.8" }

An example to use multiple Google's public DNS cache concurrently:

    >>> let conf = defaultResolvConf { resolvInfo = RCHostNames ["8.8.8.8","8.8.4.4"], resolvConcurrent = True }

An example to disable EDNS:

    >>> let conf = defaultResolvConf { resolvQueryControls = ednsEnabled FlagClear }

An example to enable query result caching:

    >>> let conf = defaultResolvConf { resolvCache = Just defaultCacheConf }

An example to disable requesting recursive service.

    >>> let conf = defaultResolvConf { resolvQueryControls = rdFlag FlagClear }

An example to set the AD bit in all queries by default.

    >>> let conf = defaultResolvConf { resolvQueryControls = adFlag FlagSet }

An example to set the both the AD and CD bits in all queries by default.

    >>> let conf = defaultResolvConf { resolvQueryControls = adFlag FlagSet <> cdFlag FlagSet }

An example with an EDNS buffer size of 1216 bytes, which is more robust with IPv6, and the DO bit set to request DNSSEC responses.

    >>> let conf = defaultResolvConf { resolvQueryControls = ednsSetUdpSize (Just 1216) <> doFlag FlagSet }

#### Instances

Instances details

Show ResolvConf Source # |
Instance details Defined in Network.DNS.Types.Resolver Methods showsPrec :: Int -> ResolvConf -> ShowS show :: ResolvConf -> String showList :: [ResolvConf] -> ShowS

defaultResolvConf :: ResolvConf Source #

Return a default `ResolvConf`:

- `resolvInfo` is `RCFilePath` "/etc/resolv.conf".
- `resolvTimeout` is 3,000,000 micro seconds.
- `resolvRetry` is 3.
- `resolvConcurrent` is False.
- `resolvCache` is Nothing.
- `resolvQueryControls` is an empty set of overrides.

## Accessors

resolvInfo :: ResolvConf -> FileOrNumericHost Source #

Server information.

resolvTimeout :: ResolvConf -> Int Source #

Timeout in micro seconds.

resolvRetry :: ResolvConf -> Int Source #

The number of retries including the first try.

resolvConcurrent :: ResolvConf -> Bool Source #

Concurrent queries if multiple DNS servers are specified.

resolvCache :: ResolvConf -> Maybe CacheConf Source #

Cache configuration.

resolvQueryControls :: ResolvConf -> QueryControls Source #

Overrides for the default flags used for queries via resolvers that use this configuration.

## Specifying DNS servers

data FileOrNumericHost Source #

The type to specify a cache server.

Constructors

RCFilePath FilePath | A path for "resolv.conf" where one or more IP addresses of DNS servers should be found on Unix. Default DNS servers are automatically detected on Windows regardless of the value of the file name.
RCHostName HostName | A numeric IP address. Warning: host names are invalid.
RCHostNames [HostName] | Numeric IP addresses. Warning: host names are invalid.
RCHostPort HostName PortNumber | A numeric IP address and port number. Warning: host names are invalid.

#### Instances

Instances details

Show FileOrNumericHost Source # |
Instance details Defined in Network.DNS.Types.Resolver Methods showsPrec :: Int -> FileOrNumericHost -> ShowS show :: FileOrNumericHost -> String showList :: [FileOrNumericHost] -> ShowS

## Configuring cache

data CacheConf Source #

Cache configuration for responses.

#### Instances

Instances details

Show CacheConf Source # |
Instance details Defined in Network.DNS.Types.Resolver Methods showsPrec :: Int -> CacheConf -> ShowS show :: CacheConf -> String showList :: [CacheConf] -> ShowS

defaultCacheConf :: CacheConf Source #

Default cache configuration.

    >>> defaultCacheConf
    CacheConf {maximumTTL = 300, pruningDelay = 10}

maximumTTL :: CacheConf -> TTL Source #

If RR's TTL is higher than this value, this value is used instead.

pruningDelay :: CacheConf -> Int Source #

Cache pruning interval in seconds.

# Intermediate data type for resolver

data ResolvSeed Source #

Intermediate abstract data type for resolvers. IP address information of DNS servers is generated according to `resolvInfo` internally. This value can be safely reused for `withResolver`.

The naming is confusing for historical reasons.

makeResolvSeed :: ResolvConf -> IO ResolvSeed Source #

Make a `ResolvSeed` from a `ResolvConf`.

Examples:

    >>> rs <- makeResolvSeed defaultResolvConf

# Type and function for resolver

data Resolver Source #

Abstract data type of DNS Resolver. This includes newly seeded identifier generators for all specified DNS servers and a cache database.

withResolver :: ResolvSeed -> (Resolver -> IO a) -> IO a Source #

Giving a thread-safe `Resolver` to the function of the second argument.

withResolvers :: [ResolvSeed] -> ([Resolver] -> IO a) -> IO a Source #

Deprecated: Use withResolver with resolvConcurrent set to True

Giving thread-safe `Resolver`s to the function of the second argument. For each `Resolver`, multiple lookups must be done sequentially. `Resolver`s can be used concurrently.