I was trying out DNS resolvers for perl and made these two scripts. test.poller.se returns 3 A records, the scripts print out 2 of them.
netdns.pl
#!/usr/bin/perl use warnings; use strict; use Net::DNS; my $resolver = new Net::DNS::Resolver; my $query = $resolver->query("test.poller.se", "A", "IN"); my @hosts; my $rr; foreach $rr ($query->answer) { push(@hosts, $rr->address); } print $hosts[0] . "\n"; print $hosts[1] . "\n";
gethostbyname.pl
#!/usr/bin/perl use warnings; use strict; use Socket; my @hosts; my ($name, $aliases, $addrtype, $length, @addrs) = gethostbyname("test.poller.se"); $hosts[0] = inet_ntoa($addrs[0]); $hosts[1] = inet_ntoa($addrs[1]); print $hosts[0] . "\n"; print $hosts[1] . "\n";
Performance difference for the two is quite big. Of course, Net::DNS is more then just a simple resolver.
$ time for i in `seq 1 1000`; do ./netdns.pl > /dev/null; done real 1m18.185s user 0m46.203s sys 0m29.418s $ time for i in `seq 1 1000`; do ./gethostbyname.pl > /dev/null; done real 0m26.886s user 0m7.784s sys 0m17.969s

