View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
Paul Evans > IO-Async-Resolver-DNS-0.04 > IO::Async::Resolver::DNS



Annotate this POD

View/Report Bugs
Module Version: 0.04   Source   Latest Release: IO-Async-Resolver-DNS-0.06


IO::Async::Resolver::DNS - resolve DNS queries using IO::Async


 use IO::Async::Loop;
 use IO::Async::Resolver::DNS;
 my $loop = IO::Async::Loop->new;
 my $resolver = $loop->resolver;
    dname => "",
    type  => "MX",
    on_resolved => sub {
       my ( $pkt ) = @_;
       foreach my $mx ( $pkt->answer ) {
          next unless $mx->type eq "MX";
          printf "preference=%d exchange=%s\n",
             $mx->preference, $mx->exchange;
    on_error => sub { die "Cannot resolve - $_[-1]\n" },


This module extends the IO::Async::Resolver class with extra methods and resolver functions to perform DNS-specific resolver lookups. It does not directly provide any methods or functions of its own.

These functions are provided for performing DNS-specific lookups, to obtain MX or SRV records, for example. For regular name resolution, the usual getaddrinfo and getnameinfo methods on the standard IO::Async::Resolver should be used.

If Net::LibResolv is installed then it will be used for actually sending and receiving DNS packets, in preference to a internally-constructed Net::DNS::Resolver object. Net::LibResolv will be more efficient and shares its implementation with the standard resolver used by the rest of the system. Net::DNS::Resolver reimplements the logic itself, so it may have differences in behaviour from that provided by libresolv. The ability to use the latter is provided to allow for an XS-free dependency chain, or for other situations where Net::LibResolv is not available.

Record Extraction

If certain record type queries are made, extra information is returned to the on_resolved continuation, containing the results from the DNS packet in a more useful form. This information will be in a list of extra values following the packet value

 $on_resolved->( $pkt, @data )

The type of the elements in @data will depend on the DNS record query type:


$resolver->res_query( %params )

Performs a resolver query on the name, class and type, and invokes a continuation when a result is obtained.

Takes the following named parameters:

dname => STRING

Domain name to look up

type => STRING

Name of the record type to look up (e.g. MX)

class => STRING

Name of the record class to look up. Defaults to IN so normally this argument is not required.

on_resolved => CODE

Continuation which is invoked after a successful lookup. Will be passed a Net::DNS::Packet object containing the result.

 $on_resolved->( $pkt )

For certain query types, this continuation may also be passed extra data in a list after the $pkt

 $on_resolved->( $pkt, @data )

See the Record Extraction section above for more detail.

on_error => CODE

Continuation which is invoked after a failed lookup.

$resolver->res_search( %params )

Performs a resolver query on the name, class and type, and invokes a continuation when a result is obtained. Identical to res_query except that it additionally implements the default domain name search behaviour.


Paul Evans <>

syntax highlighting: