Skip to content

Current limits

Every table in wired is a fixed array sized at build time. A peer that needs more than a table holds is refused on the wire (the stream reset, the request answered with an error) rather than served from new memory. The numbers below are the values in the source; the names in the right column are the constants to look up (or, where noted, to override with -D at build time).

Limit Value Constant
QUIC connections per server 64 WIRED_CONNTABLE_CAP
WebTransport sessions per connection 2 SRVRUN_MAX_WT_SESSIONS
WebTransport sessions, all connections 64 SRVRUN_MAX_WT_SESSIONS_GLOBAL
New WebTransport sessions per connection per second 10 SRVRUN_MAX_WT_SESSIONS_PER_WINDOW
Client-opened WT bidi streams per connection 24 (-D overridable) WIRED_SRVLOOP_MAX_WT_STREAMS
Client-opened WT uni streams per connection 6 WIRED_SRVLOOP_MAX_WT_UNI_STREAMS
Server-opened WT streams sending at once, per connection 16 SRVRUN_WT_SEND_SLOTS
Receive window of one WT stream 49152 bytes WIRED_SRVLOOP_WT_BUF_CAP
Limit Value Constant
Concurrent request streams per connection 40 (-D overridable) WIRED_SRVLOOP_MAX_STREAMS
Request body window (whole body without on_body; per round with it) 2048 bytes BODYWIN_CAP
Request header section 2048 bytes WIRED_H3_MAX_FIELD_SECTION
Request headers kept per request (further ones ignored) 32 WIRED_H3REQDRIVE_MAX_HDRS
Response header fields per handler round 8 WIRED_HTTP_MAX_FIELDS
Room for the encoded response headers 512 bytes SRVRUN_RESP_HDR_ROOM
One fixed response round (headers + body) 16384 bytes WIRED_SRVRUN_RESP_MAX

A request body larger than 2048 bytes needs wired_srvrun_handler.on_body, which receives it window by window (Streaming a POST body); a response larger than one round is streamed (Streaming a large body).

Limit Value Constant
Sessions one hub tracks 32 WIRED_MOQTRUN_MAX_SESSIONS
Tracks one session can PUBLISH 3 WIRED_MOQTRUN_MAX_TRACKS_PER_PEER
Publisher streams relayed at once, per track 4 WIRED_MOQTRUN_MAX_RELAYS
Object tail held across deliveries 16384 bytes WIRED_MOQTRUN_RELAY_FRAG_MAX
Buffers for held tails, hub-wide 8 WIRED_MOQTRUN_FRAG_POOL
Request streams, hub-wide 64 WIRED_MOQTRUN_MAX_REQS
Request streams per session 16 WIRED_MOQTRUN_MAX_REQS_PER_SESSION
FETCH responses served at once, hub-wide 8 WIRED_MOQTRUN_MAX_FETCHES
Received control message body 1024 bytes WIRED_MOQTRUN_CTL_MSG_MAX
Track Name 64 bytes WIRED_MOQTRUN_MAX_NAME
Encoded Track Namespace 128 bytes WIRED_MOQTRUN_MAX_NS
GOAWAY New Session URI 8192 bytes WIRED_MOQTRUN_GOAWAY_URI_MAX
Range Filter Ranges per request (advertised MAX_FILTER_RANGES) 4 WIRED_MOQTRUN_MAX_FILTER_RANGES
Unanswered REQUEST_UPDATEs per request (advertised MAX_REQUEST_UPDATES) 4 WIRED_MOQTRUN_MAX_REQ_UPDATES
FETCH cache the arena the app passes wired_moqt_cache_attach

draft-ietf-moq-transport parts not implemented

Section titled “draft-ietf-moq-transport parts not implemented”

The hub speaks draft-18, draft-19 or draft-22, chosen per session from the WebTransport subprotocol the client offers (moqt-18/moqt-19/moqt-22). The list below applies to all three unless a draft is named.

  • A session that negotiates no subprotocol (a browser without WebTransport protocols support, for one) speaks draft-19 over the older single bidirectional control stream; the unidirectional control-stream pair (draft-22 6.3), draft-18 and draft-22 need a moqt-NN subprotocol. The guide’s samples negotiate moqt-22 and do not run on this path; examples/moqt_chat uses it only as a fallback.
  • A subscription made on that bidirectional control stream gets no PUBLISH_DONE, since the stream has no Request ID to name it by; subscriptions on their own request streams do.
  • REQUEST_UPDATE of a SUBSCRIBE_TRACKS is answered NOT_SUPPORTED, and so is REQUEST_UPDATE of the sender’s own PUBLISH except on a draft-22 session.
  • Range Filters (draft-19 and draft-22 only) are validated and counted against MAX_FILTER_RANGES, but only OBJECTID_FILTER filters delivery, and only for Objects sent as datagrams; the other filter types pass.
  • The DEFAULT_PUBLISHER_PRIORITY Track Property is not read; an Object without an explicit Publisher Priority counts as 128.
  • The hub’s own tracks (wired_moqt_publish_blob, wired_moqt_publish_live) have no namespace and match a SUBSCRIBE by Track Name only.
  • MoQT also runs directly over QUIC (ALPN moqt-22/moqt-19/moqt-18, set with wired_srvboot_id.raw_alpns and raw_on_session), but that path is so far checked only in-process and against a few interop clients.