NAME
IO::Lambda::DNS - DNS queries lambda style
DESCRIPTION
The module provides access to asynchronous DNS queries through Net::DNS. Two function doing the same operation are featured: constructor new
and predicate dns
.
SYNOPSIS
use strict;
use IO::Lambda::DNS qw(:all);
use IO::Lambda qw(:all);
# simple async query
my $reply = IO::Lambda::DNS-> new( "www.site.com" )-> wait;
print (($reply =~ /^\d/) ? "Resolved to $reply\n" : "Error: $reply\n");
# parallel async queries
lambda {
for my $site ( map { "www.$_.com" } qw(google yahoo perl)) {
context $site, 'MX', timeout => 0.25;
dns { print shift-> string if ref($_[0]) }
}
}-> wait;
OPTIONS
Accepted options specific to the module are timeout
or deadline
(in seconds) and retry
(in times). All other options, such as nameservers
, dnssec
etc etc are passed as is to the Net::DNS::Resolver
constructor. See its man page for details.
USAGE
- new
-
Constructor
new
accepts Net::DNS-specific options (see OPTIONS above) and query, and returns a lambda. The lambda accepts no parameters, return either IP address or response object, depending on the call, or an error string.new ($CLASS, %OPTIONS, $HOSTNAME) :: () -> $IP_ADDRESS|$ERROR
In simple case, accepts
$HOSTNAME
string, and returns a string, either IP address or an error. To distinguish between these use/^\d/
regexp, because it is guaranteed that no error message will begin with digit, and no IP address will begin with anything other than digit.dns (%OPTIONS, ($PACKET | $HOSTNAME $TYPE)) :: () -> $RESPONSE|$ERROR
In complex case, accepts either
$HOSTNAME
string and$TYPE
string, where the latter isA
,MX
, etc DNS query type. See "new" in Net::DNS::Resolver. Returns eitherNet::DNS::RR
object or error string. - dns
-
Predicate wrapper over
new
.dns (%OPTIONS, $HOSTNAME) -> $IP_ADDRESS|$ERROR dns (%OPTIONS, ($PACKET | $HOSTNAME $TYPE)) -> $RESPONSE|$ERROR
SEE ALSO
IO::Lambda, Net::DNS::Resolver.
AUTHOR
Dmitry Karasik, <dmitry@karasik.eu.org>.