Repository navigation
VPeeN v4.7.0 β Nitro
VPeeN v4.7.0 β Nitro
The tail-latency release: hedged connects, a resolver cache, and a pool that adapts to reality.
β‘ What got faster
Hedged upstream connects β when the chosen server's TLS handshake has not landed within 350 ms, a parallel backup connect to the next-best server starts; the first success wins. A stalled "best" server used to cost every connection of a browsing burst its full 8 s budget β it now costs 0.35 s. The loser is reaped in the background (never cancelled mid-handshake: that is a socket-leak path) and gets no breaker penalty. Hedges only fire when a handshake permit is free, so bursts never double their load on the free proxy.
Resolver cache with singleflight β every fresh connect used to pay a blocking getaddrinfo (on Windows the resolver also tries LLMNR/mDNS first β routinely 50β200 ms). Resolved proxy IPs are now cached for 60 s and shared by every connect, refill wave and latency probe; a 30-socket burst produces ONE lookup instead of 30. A dead resolver serves the stale cached answer instead of failing.
Happy-Eyeballs across DNS records β a server given by hostname is expanded to its concrete A/AAAA records and ALL of them race staggered. A blackholed first record costs 150 ms instead of the full timeout. TLS SNI and certificate validation still use the original hostname, so security is unchanged.
π― What got smarter
Adaptive warm-pool TTL (8β25 s) β servers that reap idle sockets faster than we assumed used to turn warm hits into failed CONNECTs. Each stale entry now shrinks the TTL toward an 8 s floor; it recovers slowly between probe cycles.
Demand-adaptive pool size (12β24) β the refill target tracks the last 10 s of connection demand. Browsing is bursty; the burst after a burst now starts mostly pre-paid.
Throughput ranking that ages β a measured-KB/s number only ranks a server for 10 minutes, and the top candidates are re-measured every ~3 minutes, so a "best" server that collapses under load is demoted mid-session.
Wider handshake window β parallel-handshake cap 12 β 16; with the resolver cache each handshake starts without the getaddrinfo hop, so the wider window is no longer a flood. The DNS relay's cache went 30 β 60 s, aligned with the SOCKS-UDP relay.
π₯ Visible in the UI
The status line now shows "N rescued" β hedged connects that saved a stalled handshake β next to "N warm". The 30-second log line reports hedges and the adaptive TTL alongside hits/stale.
π The numbers
| Scenario | v4.6.0 | v4.7.0 |
|---|---|---|
| First connect of a burst | getaddrinfo + TCP + TLS + CONNECT | cached resolve + TCP + TLS + CONNECT |
| Best server stalls mid-session | every connection waits up to 8 s | 0.35 s hedge, backup carries it |
| Blackholed first DNS record | up to 8 s | 150 ms |
| Server reaps idle conns at 10 s | warm hits become failed CONNECTs | TTL shrinks to fit, hits stay real |
| Second burst within 10 s | pool back to floor 12 | pool sized to the burst (β€ 24) |
| "Best" server collapses under load | ranked by a 10-min-old number | re-measured every ~3 min |
β Quality
135 checks green: 42 speed-pass (10 new for Nitro), 59 regression, 11 integration, 23 web-UI. No settings, commands or file formats changed β the SOCKS5/HTTP surface is untouched; the only observable differences are speed, two status fields and one log line.
Full changelog: CHANGELOG-v4.7.0.md
Windows β download VPeeN-4.7.0-Windows.zip, extract, run VPeeN.exe.
macOS β download VPeeN-4.7.0-macOS.zip; on Sequoia/Tahoe 26 right-click β Open (the binary is ad-hoc signed; see README's Gatekeeper section).
Linux β download VPeeN-4.7.0-Linux.tar.gz, extract, run ./VPeeN (or use the AppImage-style launcher inside).