cloudflare/quiche · error

Unable to create HTTP/3 connection, check the server's uni…

Error message

Unable to create HTTP/3 connection, check the server's uni stream limit and window size

What it means

When establishing the client's HTTP/3 layer, connect_to h3::Connection::with_streams is unwrapped with this message. The H3 handshake allocates control/QPACK encoder/decoder uni streams, which fails if the server's advertised uni stream limit or flow-control window is too small to open them.

Solutions

  1. Raise the server's uni stream limit (e.g. Config::set_max_streams_uni to >= 3) and window sizes (set_stream_window_uni / set_max_data)
  2. Check the server's quiche::Config for restrictive transport parameters
  3. Capture a qlog of the handshake to confirm the advertised limits
  4. If you control neither endpoint, use a server with standard HTTP/3 defaults

Example fix

// before (server config)
config.set_max_streams_uni(2); // not enough for control + QPACK streams
// after (server config)
config.set_max_streams_uni(8);
config.set_stream_window_uni(16_384);
Defensive patterns

Strategy: validation

Validate before calling

// on the server side, before accepting clients:
config.set_max_streams_uni(8); // h3 needs control + QPACK encoder/decoder streams
config.set_stream_window_uni(16_384);
config.set_max_data(1_048_576);

Try / catch

let h3_conn = h3::Connection::with_streams(...)
    .map_err(|e| anyhow!("Unable to create HTTP/3 connection: {e} \
        (check server's uni stream limit and window size)"))?;

Prevention

When it happens

Trigger: Server transport parameters set max_streams_uni (or window sizes) too low, so h3::Connection creation in apps/src/common.rs:852 fails while building the Http3Conn client.

Common situations: Custom/minimal quiche-server configs with reduced stream limits or windows; misconfigured intermediates; clients talking to servers with unusually restrictive transport parameters.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of cloudflare/quiche@9f96daa2c2 (2026-09-08). Data as JSON: /api/errors/40f260d7f8c913ef. Report an issue: GitHub.

Appendix: source

Thrown at apps/src/common.rs:852

                    priority,
                    response_hdrs: Vec::new(),
                    response_body: Vec::new(),
                    response_body_max: dump_json.unwrap_or_default(),
                    stream_id: None,
                    response_writer: None,
                });
            }
        }

        let h_conn = Http3Conn {
            h3_conn: quiche::h3::Connection::with_transport(
                conn,
                &make_h3_config(
                    max_field_section_size,
                    qpack_max_table_capacity,
                    qpack_blocked_streams,
                ),
            ).expect("Unable to create HTTP/3 connection, check the server's uni stream limit and window size"),
            reqs_hdrs_sent: 0,
            reqs_complete: 0,
            largest_processed_request: 0,
            reqs,
            body: body.as_ref().map(|b| b.to_vec()),
            sent_body_bytes: HashMap::new(),
            dump_json: dump_json.is_some(),
            dgram_sender,
            output_sink,
        };

        Box::new(h_conn)
    }

    pub fn with_conn(
        conn: &mut quiche::Connection, max_field_section_size: Option<u64>,
        qpack_max_table_capacity: Option<u64>,
        qpack_blocked_streams: Option<u64>,

View on GitHub (pinned to 9f96daa2c2)