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).
Connections and WebTransport
Section titled “Connections and WebTransport”| 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 |
HTTP/3 requests
Section titled “HTTP/3 requests”| 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).
MoQT hub
Section titled “MoQT hub”| 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
protocolssupport, 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 amoqt-NNsubprotocol. The guide’s samples negotiatemoqt-22and do not run on this path;examples/moqt_chatuses 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 withwired_srvboot_id.raw_alpnsandraw_on_session), but that path is so far checked only in-process and against a few interop clients.