Repository navigation
Soar v0.2.1
Fixes
- Mixed upload/download no longer shrinks query names for good. The client judged a held poll lost once three later data queries were answered, but the server holds polls and answers data at once by design. Two such false losses demoted names from 253 to 101 characters, cutting upload capacity per query about 2.5×. Loss is now judged by later polls only, and the server releases held polls oldest first. (#8)
Conn.Closecould lose the request. RESET went out once the data was acked, before the FIN was, so the server aborted the stream before dialing. It now waits for the FIN's ack. (#10)- Discovery resumes when working resolvers get blocked.
Wantnow counts only healthy paths (verified, usable, not on a run of losses), and discovery wakes at its configured pace instead of about once a second. (#10) - Liveness, hello retries and caps: the liveness clock restarts instead of stopping while queries are outstanding; hello retries rotate through all resolvers, not the first 16; the tail copy of an upload respects
MaxInflight; and a full DNS ID space can no longer spinnewTxnLockedholding the client lock. (#10) - Session and server: a full control queue ends the session instead of silently dropping frames (a dropped
MAX_STREAM_DATAstalled a stream for good); a malformed destination getsRESET_STREAMcode 1 instead of hangingwaitOpened;PublicOnlyrejects192.88.99.0/24,2001:20::/28and3fff::/20. (#10)
Behavior changes
ClientConfig.MaxInflightis capped at 1,024, andMaxStreamsat 256 on both client and server. Larger values are clamped.
Compatibility
No API changes, and the wire protocol is unchanged: v0.2.1 interoperates with v0.2.0 and v0.1.0 clients and servers.
Also in this range
SPEC.mdspecifies the wire format (version 1), andtestdata/vectors.jsonholds test vectors generated from the real encoders; CI fails on any unregenerated wire change. (#7)dnsbenchadds soar-rs, the Rust implementation, as a contender. (#9)
Full changelog: v0.2.0...v0.2.1