New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
http3 ngtcp2: QUIC connection left intact after Operation timed out #12064
Comments
Yeah, that seems... wrong? |
Or maybe not. The connection does not need to get closed due a timeout, as the streams are independent over QUIC. |
The request keep get timeout, in the mean time if you do a new curl http3 request with new process you will get 200 response. |
Sure, but that doesn't explain where the problem is. Why does it get a timeout? Did the connection get closed? |
I guess wait 110 secends cause the connect closed. (by router of client side or cloudflare server) if change wait time and CURLOPT_MAXAGE_CONN into 70, it will work fine. |
Right, we are just guessing so far. |
The client side libcurl is not closed it, the outside close it but libcurl can't realize the connection is closed. the connection is closed, but it keep left intact status if you are try use it. ( Although the server did not return any data during this period ) |
Do you have a packet trace showing this or is this what you assume is happening? |
This is the wireshark packet record, confirm my guess. send 2nd request at 110s, 3nd request at 117s. zero packet response from 1.1.1.1 and get timeout error from curl. |
Thanks, yes it makes total sense. But due to QUIC etc we probably need to do a rethink how to fix this best. |
Reproducer test case: issue-12064.c If the URL is instead changed to |
- configure a 120s idle timeout on our side of the connection - track the timestamp when actual socket IO happens - check IO timestamp to our *and* the peer's idle timeouts in "is this connection alive" checks - refs curl#12064
- configure a 120s idle timeout on our side of the connection - track the timestamp when actual socket IO happens - check IO timestamp to our *and* the peer's idle timeouts in "is this connection alive" checks Reported-by: calvin2021y on github Fixes curl#12064 Closes curl#12077
I did this
build libcurl with master branch and openssl-3.0.10+quic, lastest ngtcp2 and nghttp3 release.
set CURLOPT_MAXAGE_CONN more than 110, with multi interface.
with step:
send request to https://1.1.1.1 with http3 protocol, get 200 response.
wait 110 secends
send request to https://1.1.1.1 with http3 protocol again with same multi handle , get timeout error
wait 1~ 10 secends
send request to https://1.1.1.1 with http3 protocol again with same multi handle , get timeout error
repeat 4, 5 will keep get timeout error.
there is the trace logs:
I expected the following
I expected after timeout error, recreate new connection for other request.
curl/libcurl version
test with 8.3.0 and master branch.
operating system
not matter
The text was updated successfully, but these errors were encountered: