#!/usr/bin/env perl
#----------------------------------------------------------------------
# NOTE: This example predates DNS::Unbound::IOAsync; if you can,
# use that module instead of doing your own polling.
#----------------------------------------------------------------------
use strict;
use warnings;
use IO::Async::Handle;
use IO::Async::Loop;
use Net::DNS::Packet;
use DNS::Unbound;
my $dns = DNS::Unbound->new();
my $loop = IO::Async::Loop->new();
my $handle = IO::Async::Handle->new(
read_fileno => $dns->fd(),
on_read_ready => sub { $dns->process() },
);
$loop->add($handle);
my $query = $dns->resolve_async('metacpan.org', 'A')->then( sub {
my $packet = Net::DNS::Packet->new( \shift()->answer_packet() );
print $packet->string() . $/;
} )->finally( sub { $loop->stop() } );
$loop->watch_time(
after => 10,
code => sub {
print "Timed out!$/";
$query->cancel();
$loop->stop();
},
);
$loop->run();