Skip to content

Adapt an arbitrary accept/connect transport (i.e. TCP) to be a Link provider - #5

Merged
plaidfinch merged 3 commits into
mainfrom
routed-link
Jul 29, 2026
Merged

Adapt an arbitrary accept/connect transport (i.e. TCP) to be a Link provider#5
plaidfinch merged 3 commits into
mainfrom
routed-link

Conversation

@plaidfinch

Copy link
Copy Markdown
Collaborator

No description provided.

The design of record for rumors::link::routed: one connection per
stream behind a per-process router, a token-routed connect header
with a one-RTT establishment acknowledgement, generic over a
caller-supplied Dial/Listen seam (opaque addresses, no IP binding).
Records the decisions: in-crate module, per-link token, single-use
connections, caller-driven router with count-bounded header reads,
pooling deferred to the Dial seam (with the qorb evaluation), no
discovery in v1.
rumors::link::routed adapts any accept/connect byte-stream transport
(a caller-supplied Dial/Listen pair; addresses are opaque names in
the caller's namespace, not IP) into a Link: one connection per
stream, routed to its link by a token-bearing connect header, with a
one-RTT establishment acknowledgement making token registration on
both routers happen-before either end's first stream open.

The router is a caller-driven future (the crate still spawns nothing
and needs no runtime or clock): per-connection header reads run as
concurrent futures bounded by count with oldest-first eviction,
delivery into per-link queues is try_send-only, and a queue overflow
evicts the whole link so misbehavior surfaces as transport failure
instead of a silently lost stream. Dropping a link revokes its
routing at that moment.

Validated by the exported conformance suite over TCP (default and
OS-floor buffers, both construction orientations) and over a string-
named in-memory network, plus a three-endpoint mesh converging by
concurrent gossip beside a connection stalled mid-header, and unit
suites for the wire format and every router-discipline clause.
…aths

Rename Token::mint() to Token::new(), and import the handful of names
the new modules had been spelling out inline (Entry, HashMap,
MutexGuard, TrySendError, IpAddr, fmt, split, duplex, select,
try_join, Link, LinkInfo).
@plaidfinch
plaidfinch marked this pull request as ready for review July 29, 2026 15:11
@plaidfinch
plaidfinch merged commit da23a96 into main Jul 29, 2026
1 check failed
@plaidfinch
plaidfinch deleted the routed-link branch July 29, 2026 15:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant