AnyEvent-DNS-EtcHosts

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN


    AnyEvent::DNS::EtcHosts - Use /etc/hosts before DNS

SYNOPSIS

        use AnyEvent::DNS::EtcHosts;
    
        use AnyEvent::DNS;
        my $cv = AE::cv;
        AnyEvent::DNS::any 'example.com', sub {
            say foreach map { $_->[4] } grep { $_->[1] =~ /^(a|aaaa)$/ } @_;
            $cv->send;
        };
    
        use AnyEvent::Socket;
        my $cv = AE::cv;
        AnyEvent::Socket::resolve_sockaddr $domain, $service, $proto, $family, undef, sub {
            say foreach map { format_address((AnyEvent::Socket::unpack_sockaddr($_->[3]))[1]) } @_;
            $cv->send;
        };

DESCRIPTION

    AnyEvent::DNS::EtcHosts changes AnyEvent::DNS behavior. The /etc/hosts
    file is searched before DNS, so it is possible to override DNS entries.

    The DNS lookups are emulated. This resolver returns the standard DNS
    reply based on /etc/hosts file rather than real DNS.

examples/dns.pl  view on Meta::CPAN

use lib 'lib', '../lib';

my $domain = $ARGV[0] || 'example.com';

use if ($ENV{PERL_ANYEVENT_DNS} || "") eq 'EtcHosts' || !$ENV{PERL_ANYEVENT_DNS}, 'AnyEvent::DNS::EtcHosts';
use AnyEvent::DNS;

my $cv = AE::cv;

AnyEvent::DNS::any $domain, sub {
    say foreach map { $_->[4] } grep { $_->[1] =~ /^(a|aaaa)$/ } @_;
    $cv->send;
};

$cv->recv;

examples/lexical.pl  view on Meta::CPAN

my $domain = $ARGV[0]  || 'example.com';
my $service = $ARGV[1] || 80;
my $proto = $ARGV[2]   || 'tcp';
my $family = $ARGV[3]  || 0;

require AnyEvent::DNS::EtcHosts;

use AnyEvent::Socket;
use Socket;

say 'Disabled AnyEvent::DNS::EtcHosts';

{
    my $cv = AE::cv;

    AnyEvent::Socket::resolve_sockaddr $domain, $service, $proto, $family, undef, sub {
        say foreach map { format_address((AnyEvent::Socket::unpack_sockaddr($_->[3]))[1]) } @_;
        $cv->send;
    };

    $cv->recv;
}

say '';
say 'Enabled AnyEvent::DNS::EtcHosts';

{
    my $guard = AnyEvent::DNS::EtcHosts->register;

    my $cv = AE::cv;

    AnyEvent::Socket::resolve_sockaddr $domain, $service, $proto, $family, undef, sub {
        say foreach map { format_address((AnyEvent::Socket::unpack_sockaddr($_->[3]))[1]) } @_;
        $cv->send;
    };

    $cv->recv;
}

say '';
say 'Disabled AnyEvent::DNS::EtcHosts';

{
    my $cv = AE::cv;

    AnyEvent::Socket::resolve_sockaddr $domain, $service, $proto, $family, undef, sub {
        say foreach map { format_address((AnyEvent::Socket::unpack_sockaddr($_->[3]))[1]) } @_;
        $cv->send;
    };

    $cv->recv;
}

examples/socket.pl  view on Meta::CPAN

my $proto = $ARGV[2]   || 'tcp';
my $family = $ARGV[3]  || 0;

use if ($ENV{PERL_ANYEVENT_DNS} || '') eq 'EtcHosts' || !$ENV{PERL_ANYEVENT_DNS}, 'AnyEvent::DNS::EtcHosts';
use AnyEvent::Socket;
use Socket;

my $cv = AE::cv;

AnyEvent::Socket::resolve_sockaddr $domain, $service, $proto, $family, undef, sub {
    say foreach map { format_address((AnyEvent::Socket::unpack_sockaddr($_->[3]))[1]) } @_;
    $cv->send;
};

$cv->recv;

lib/AnyEvent/DNS/EtcHosts.pm  view on Meta::CPAN


=head1 SYNOPSIS

=for markdown ```perl

    use AnyEvent::DNS::EtcHosts;

    use AnyEvent::DNS;
    my $cv = AE::cv;
    AnyEvent::DNS::any 'example.com', sub {
        say foreach map { $_->[4] } grep { $_->[1] =~ /^(a|aaaa)$/ } @_;
        $cv->send;
    };

    use AnyEvent::Socket;
    my $cv = AE::cv;
    AnyEvent::Socket::resolve_sockaddr $domain, $service, $proto, $family, undef, sub {
        say foreach map { format_address((AnyEvent::Socket::unpack_sockaddr($_->[3]))[1]) } @_;
        $cv->send;
    };

=for markdown ```

=head1 DESCRIPTION

AnyEvent::DNS::EtcHosts changes AnyEvent::DNS behavior. The F</etc/hosts> file
is searched before DNS, so it is possible to override DNS entries.



( run in 2.363 seconds using v1.01-cache-2.11-cpan-9169edd2b0e )