diff --git a/Playground/Http3/ManagedBuffered/Program.cs b/Playground/Http3/ManagedBuffered/Program.cs index 413a2cc8..d1e52fab 100644 --- a/Playground/Http3/ManagedBuffered/Program.cs +++ b/Playground/Http3/ManagedBuffered/Program.cs @@ -56,6 +56,10 @@ Port = quicPort, LocalCidLength = 8, ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Http3/ManagedStreamedBoth/Program.cs b/Playground/Http3/ManagedStreamedBoth/Program.cs index 0dba0a09..d52822eb 100644 --- a/Playground/Http3/ManagedStreamedBoth/Program.cs +++ b/Playground/Http3/ManagedStreamedBoth/Program.cs @@ -65,6 +65,10 @@ Port = quicPort, LocalCidLength = 8, ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Http3/MutualTls/Program.cs b/Playground/Http3/MutualTls/Program.cs index c25daf6a..d77b0636 100644 --- a/Playground/Http3/MutualTls/Program.cs +++ b/Playground/Http3/MutualTls/Program.cs @@ -80,6 +80,10 @@ Port = quicPort, LocalCidLength = 8, ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Http3/Nghttp3Buffered/Program.cs b/Playground/Http3/Nghttp3Buffered/Program.cs index 446428c8..aeaf95a7 100644 --- a/Playground/Http3/Nghttp3Buffered/Program.cs +++ b/Playground/Http3/Nghttp3Buffered/Program.cs @@ -99,6 +99,10 @@ LocalCidLength = (int)cidLength, // must match the engine's cidLength IdleTimeoutMs = idleTimeoutMs, ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Http3/Nghttp3Request/Program.cs b/Playground/Http3/Nghttp3Request/Program.cs index 007b908a..32e7146b 100644 --- a/Playground/Http3/Nghttp3Request/Program.cs +++ b/Playground/Http3/Nghttp3Request/Program.cs @@ -93,6 +93,10 @@ LocalCidLength = 8, // must match the engine's cidLength IdleTimeoutMs = 60_000, // close a connection idle this long (no packets) ConnectionFactory = engine.CreateFactory(), // the engine adopts each new connection + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Http3/Nghttp3Response/Program.cs b/Playground/Http3/Nghttp3Response/Program.cs index 869e918e..a5b1d15c 100644 --- a/Playground/Http3/Nghttp3Response/Program.cs +++ b/Playground/Http3/Nghttp3Response/Program.cs @@ -68,6 +68,10 @@ Port = quicPort, LocalCidLength = 8, ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Http3/Rotate/Program.cs b/Playground/Http3/Rotate/Program.cs index a3eaa4d5..72f1b9f6 100644 --- a/Playground/Http3/Rotate/Program.cs +++ b/Playground/Http3/Rotate/Program.cs @@ -114,6 +114,10 @@ LocalCidLength = 8, // From here the host table is live, and only ReplaceCertificates may change it. ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Http3/Sni/Program.cs b/Playground/Http3/Sni/Program.cs index bc06cf5e..c35f9162 100644 --- a/Playground/Http3/Sni/Program.cs +++ b/Playground/Http3/Sni/Program.cs @@ -85,6 +85,10 @@ LocalCidLength = 8, // From here the host table is live and closed to further additions. ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Proxy/H3ToH1/Program.cs b/Playground/Proxy/H3ToH1/Program.cs index 53ae2330..6ece64ec 100644 --- a/Playground/Proxy/H3ToH1/Program.cs +++ b/Playground/Proxy/H3ToH1/Program.cs @@ -75,6 +75,10 @@ LocalCidLength = 8, // CID bytes this endpoint mints (must match the engine) IdleTimeoutMs = 60_000, // transport idle backstop; 0 disables sweep eviction ConnectionFactory = engine.CreateFactory(), // adopts new connections into the engine + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Quic/Alpn/Program.cs b/Playground/Quic/Alpn/Program.cs index 33133e10..dc3a90ee 100644 --- a/Playground/Quic/Alpn/Program.cs +++ b/Playground/Quic/Alpn/Program.cs @@ -70,6 +70,10 @@ LocalCidLength = 8, // must match the engine's cidLength IdleTimeoutMs = 60_000, // close a connection idle this long (no packets) ConnectionFactory = engine.CreateFactory(), // the engine adopts each new connection + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, }, }; diff --git a/Playground/Quic/Pipe/Program.cs b/Playground/Quic/Pipe/Program.cs index 47d397dc..a40a1195 100644 --- a/Playground/Quic/Pipe/Program.cs +++ b/Playground/Quic/Pipe/Program.cs @@ -72,6 +72,10 @@ Port = quicPort, // every reactor binds it via SO_REUSEPORT LocalCidLength = 8, // short headers carry no CID length on the wire ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, IdleTimeoutMs = 60_000, // transport backstop; 0 disables the sweep }, }; diff --git a/Playground/Quic/Raw/Program.cs b/Playground/Quic/Raw/Program.cs index 7cbbeb96..db71ccfb 100644 --- a/Playground/Quic/Raw/Program.cs +++ b/Playground/Quic/Raw/Program.cs @@ -71,6 +71,10 @@ Port = quicPort, // every reactor binds it via SO_REUSEPORT LocalCidLength = 8, // short headers carry no CID length on the wire ConnectionFactory = engine.CreateFactory(), + // Where a moved client's packets go when several reactors share the port. Forward costs + // nothing until a client actually changes address; KernelFilter has the kernel route by + // connection id instead, which costs a little on every packet. See /how-ioxide-does-h3. + Routing = QuicRouting.Forward, IdleTimeoutMs = 60_000, // transport backstop; 0 disables the sweep }, }; diff --git a/docs/learn/quic-h3.html b/docs/how-ioxide-does-h3.html similarity index 61% rename from docs/learn/quic-h3.html rename to docs/how-ioxide-does-h3.html index 1369ab87..9ff70581 100644 --- a/docs/learn/quic-h3.html +++ b/docs/how-ioxide-does-h3.html @@ -3,10 +3,11 @@ - QUIC & HTTP/3 - ioxide - - - + How ioxide does HTTP/3 - ioxide + + + +