while (scalar @domains > 0) {
my @active = $sel->handles;
while ($#active < $DNS_SOCK_MAX - 1) {
# queue up a query for this domain.
my $d = pop(@domains);
$sel->add($res->bgsend($d, "A"));
$sel->add($res->bgsend($d, "MX"));
@active = $sel->handles;
}
my @ready = $sel->can_read($timeout);
if (@ready) {
foreach my $sock (@ready) {
my $packet = $res->bgread($sock);
if ($packet->header->ancount) {
my @q = $packet->question;
if ($q[0]->qtype eq "A" || $q[0]->qtype eq "MX") {
my $d = $q[0]->qname;
delete $SENDERS{$d};
}
}
# Check for the other sockets.
$sel->remove($sock);
$sock = undef;
}
} else {
# nothing for now.
}
}
@domains = undef;
my $timedout = 0;
my @ready;
while($timedout < 4 && $sel->handles && (@ready = $sel->can_read($timeout))) {
if (@ready) {
foreach my $sock (@ready) {
my $packet = $res->bgread($sock);
if ($packet->header->ancount) {
my @q = $packet->question;
if ($q[0]->qtype eq "A" || $q[0]->qtype eq "MX") {
my $d = $q[0]->qname;
delete $SENDERS{$d};
}
}
# Check for the other sockets.
$sel->remove($sock);
$sock = undef;
}
} else {
$timedout++;
}
}