NAME
Mail::SpamAssassin::DnsResolver - DNS resolution engine
DESCRIPTION
This is a DNS resolution engine for SpamAssassin, implemented in order to reduce file descriptor usage by Net::DNS and avoid a response collision bug in that module.
METHODS
- $res->load_resolver()
-
Load the
Net::DNS::Resolver
object. Returns 0 if Net::DNS cannot be used, 1 if it is available. - $resolver = $res->get_resolver()
-
Return the
Net::DNS::Resolver
object. - $res->nameservers()
-
Wrapper for Net::DNS::Reslolver->nameservers to get or set list of nameservers
- $res->connect_sock()
-
Re-connect to the first nameserver listed in
/etc/resolv.conf
or similar platform-dependent source, as provided byNet::DNS
. - $res->get_sock()
-
Return the
IO::Socket::INET
object used to communicate with the nameserver. - $packet = new_dns_packet ($host, $type, $class)
-
A wrapper for
Net::DNS::Packet::new()
which traps a die thrown by it.To use this, change calls to
Net::DNS::Resolver::bgsend
from:$res->bgsend($hostname, $type);
to:
$res->bgsend(Mail::SpamAssassin::DnsResolver::new_dns_packet($hostname, $type, $class));
- $id = $res->bgsend($host, $type, $class, $cb)
-
Quite similar to
Net::DNS::Resolver::bgsend
, except that when a response packet eventually arrives, andpoll_responses
is called, the callback sub reference$cb
will be called.Note that
$type
and$class
may beundef
, in which case they will default toA
andIN
, respectively.The callback sub will be called with two arguments -- the packet that was delivered and an id string that fingerprints the query packet and the expected reply. It is expected that a closure callback be used, like so:
my $id = $self->{resolver}->bgsend($host, $type, undef, sub { my $reply = shift; my $reply_id = shift; $self->got_a_reply ($reply, $reply_id); });
The callback can ignore the reply as an invalid packet sent to the listening port if the reply id does not match the return value from bgsend.
- $nfound = $res->poll_responses()
-
See if there are any
bgsend
response packets ready, and return the number of such packets delivered to their callbacks. - $res->bgabort()
-
Call this to release pending requests from memory when aborting backgrounded requests
- $packet = $res->send($name, $type, $class)
-
Emulates
Net::DNS::Resolver::send()
. - $res->finish_socket()
-
Reset socket when done with it.
- $res->finish()
-
Clean up for destruction.