mozilla / neqo

Neqo, the Mozilla Firefox implementation of QUIC in Rust
https://firefox-source-docs.mozilla.org/networking/http/http3.html
Apache License 2.0
1.84k stars 123 forks source link

Demo client and server don't close resumed connection #1995

Open larseggert opened 3 months ago

larseggert commented 3 months ago

I used the following patch to test/test.sh to introduce a 0-RTT resumption (in order to debug the QNS failures, see #1874).

diff --git a/test/test.sh b/test/test.sh
index 99286a19..a3068834 100755
--- a/test/test.sh
+++ b/test/test.sh
@@ -16,14 +16,14 @@ cargo build --bin neqo-client --bin neqo-server
 addr=127.0.0.1
 port=4433
 path=/20000
-flags="--verbose --verbose --verbose --qlog-dir $tmp --use-old-http --alpn hq-interop --quic-version 1"
+flags="--verbose --verbose --verbose --idle 2 --qlog-dir $tmp --use-old-http --alpn hq-interop --quic-version 1"
 if [ "$(uname -s)" != "Linux" ]; then
         iface=lo0
 else
         iface=lo
 fi

-client="./target/debug/neqo-client $flags --output-dir $tmp --stats https://$addr:$port$path"
+client="./target/debug/neqo-client $flags --output-dir $tmp --stats --resume https://$addr:$port$path https://$addr:$port/1 https://$addr:$port/2 https://$addr:$port/3"
 server="SSLKEYLOGFILE=$tmp/test.tlskey ./target/debug/neqo-server $flags $addr:$port"

 tcpdump -U -i "$iface" -w "$tmp/test.pcap" host $addr and port $port >/dev/null 2>&1 &

Now when I run test/test.sh, the second connection seems to run into idle timeouts on both client and server.

@mxinden any thoughts?

mxinden commented 3 months ago

the second connection seems to run into idle timeouts on both client and server.

I am assuming that you are basing this on the following log line?

0s269ms INFO Closing timer expired

I can reproduce locally. That said, the timer (log line above) does not seem to correlate with the --idle flag. Setting the --idle flag to 10 still has the client terminate immediately, not wait for 10s, but still print the line above.

I can debug further on Monday.

larseggert commented 3 months ago

0-RTT resumption via --resume seems to not work at all. At least I only see one handshake in the pcap when I run the test. Also, the client prints [Client ba48fde68c1e6a18] 0-RTT rejected and the files for objects requested over 0-RTT are empty.

(It does seem to work when passing --qns-test zerortt to the client.)