mirror of
https://github.com/3proxy/3proxy.git
synced 2026-10-28 22:05:48 +08:00
dnspr answered an A or AAAA query missing from the name cache with udpresolve(), which waited for the name servers in place, and a name server over TCP was waited for in place too, holding up every query of the service. Now only the name cache is looked at in place; anything it does not have goes to the name servers from the loop: over UDP the query is sent on a socket the loop waits on, over TCP the socket is connected without waiting, the query written once the loop sees it writable, and the answer read in as many pieces as it comes. A name server silent for DNS_TO is followed by the next one, as udpresolve() did; the last ends the query with 821. An address in an answer is kept in the name cache, unless -s says not to use it. The UDP loop lets a session say what it waits for on its socket (events) and a service handle a session's deadline itself (timeout). Tests: an A query not in the cache answered by the name server and then from the cache with the server gone, an A query waiting for a silent name server while another is answered, a name server over TCP whose answer comes in pieces, and the second name server asked when the first is silent. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| admin.py | ||
| auto.py | ||
| counters.py | ||
| dnspr.py | ||
| httpsrv_auth.py | ||
| httpsrv_files.py | ||
| httpsrv_keepalive.py | ||
| httpsrv_ops.py | ||
| httpsrv_parsing.py | ||
| httpsrv_proxypass.py | ||
| httpsrv_rules.py | ||
| ipv6.py | ||
| ktls.py | ||
| maxconn.py | ||
| parent_failover.py | ||
| parent_ports.py | ||
| parent_weights.py | ||
| pcre.py | ||
| portmap.py | ||
| proxy_http.py | ||
| reattach.py | ||
| reload.py | ||
| socks.py | ||
| splice.py | ||
| ssl.py | ||
| takeover.py | ||
| timeouts.py | ||
| tlspr.py | ||
| transparent.py | ||
| udploop.py | ||
| unixsock.py | ||