import Network.DNS (
Domain,
FileOrNumericHost(RCHostName),
- ResolvConf(resolvInfo),
+ ResolvConf(resolvInfo, resolvTimeout),
defaultResolvConf,
makeResolvSeed,
withResolver )
normalize_case,
resolve_address )
import ExitCodes (exit_bad_server)
+import Timeout (Timeout(..))
-- | Report results for this LookupResult. If there's a Nothing in the
let nrml_domains = map normalize_function raw_domains
let nrml_delegates = map normalize_function raw_delegates
- rc <- case (server cfg) of
- Nothing -> return defaultResolvConf
- Just s -> do
- s' <- resolve_address s
- case s' of
- Nothing -> do
- hPutStrLn stderr ("Bad DNS server or lookup error: " ++ s)
- exitWith (ExitFailure exit_bad_server)
- Just s'' ->
- return $ defaultResolvConf { resolvInfo =
- RCHostName (show s'') }
-
+ rc' <- case (server cfg) of
+ Nothing -> return defaultResolvConf
+ Just s -> do
+ s' <- resolve_address s
+ case s' of
+ Nothing -> do
+ hPutStrLn stderr ("Bad DNS server or lookup error: " ++ s)
+ exitWith (ExitFailure exit_bad_server)
+ Just s'' ->
+ return $ defaultResolvConf { resolvInfo =
+ RCHostName (show s'') }
+
+ -- Set the timeout from the command line. The resolvTimeout field is
+ -- in microseconds, so we multiply by one million.
+ let rc = rc' { resolvTimeout = 1000 * 1000 * (seconds $ timeout cfg) }
rs <- makeResolvSeed rc
let lookup_function = case cfg of