Mail::SpamAssassin::DnsResolver(3pm) | User Contributed Perl Documentation | Mail::SpamAssassin::DnsResolver(3pm) |
Mail::SpamAssassin::DnsResolver - DNS resolution engine
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.
To use this, change calls to "Net::DNS::Resolver::bgsend" from:
$res->bgsend($domain, $type);
to:
$res->bgsend(Mail::SpamAssassin::DnsResolver::new_dns_packet($domain, $type, $class));
Quite similar to "Net::DNS::Resolver::bgsend", except that when a reply packet eventually arrives, and "poll_responses" is called, the callback sub reference $cb will be called.
Note that $type and $class may be "undef", in which case they will default to "A" and "IN", respectively.
The callback sub will be called with three arguments -- the packet that was delivered, and an id string that fingerprints the query packet and the expected reply. The third argument is a timestamp (Unix time, floating point), captured at the time the packet was collected. It is expected that a closure callback be used, like so:
my $id = $self->{resolver}->bgsend($domain, $type, undef, sub { my ($reply, $reply_id, $timestamp) = @_; $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.
This subroutine is a simple synchronous leftover from SpamAssassin version 3.3 and does not participate in packet query caching and callback grouping as implemented by AsyncLoop::bgsend_and_start_lookup(). As such it should be avoided for mainstream usage. Currently used through Mail::SPF::Server by the SPF plugin.
If called immediately after a call to $res->send this will return "query timed out" if the $res->send DNS query timed out. Otherwise "unknown error or no error" will be returned.
No other errors are reported.
2024-04-12 | perl v5.38.2 |