| 758 | raise NXDOMAIN(qnames=self.qnames_to_try, responses=self.nxdomain_responses) |
| 759 | |
| 760 | def next_nameserver(self) -> Tuple[dns.nameserver.Nameserver, bool, float]: |
| 761 | if self.retry_with_tcp: |
| 762 | assert self.nameserver is not None |
| 763 | assert not self.nameserver.is_always_max_size() |
| 764 | self.tcp_attempt = True |
| 765 | self.retry_with_tcp = False |
| 766 | return (self.nameserver, True, 0) |
| 767 | |
| 768 | backoff = 0.0 |
| 769 | if not self.current_nameservers: |
| 770 | if len(self.nameservers) == 0: |
| 771 | # Out of things to try! |
| 772 | raise NoNameservers(request=self.request, errors=self.errors) |
| 773 | self.current_nameservers = self.nameservers[:] |
| 774 | backoff = self.backoff |
| 775 | self.backoff = min(self.backoff * 2, 2) |
| 776 | |
| 777 | self.nameserver = self.current_nameservers.pop(0) |
| 778 | self.tcp_attempt = self.tcp or self.nameserver.is_always_max_size() |
| 779 | return (self.nameserver, self.tcp_attempt, backoff) |
| 780 | |
| 781 | def query_result( |
| 782 | self, response: dns.message.Message | None, ex: Exception | None |