-
-
Notifications
You must be signed in to change notification settings - Fork 6.4k
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
HTTP/3: Busy loop due to IP_RECVERR #9209
Comments
The simple fix is not set this option for QUIC. |
#6341 and d13179d brought the /cc @crrodriguez |
huh.. well..this is probably the only widespread use of UDP sockets with CURL.. I guess you can revert it safely. |
Well, curl has as also done TFTP since 2005... |
I did this
Upload a large file with HTTP/3.
Lots of POLLIN event occurs but recvfrom read nothing.
It is caused by IP_RECVERR socket option [1] set for UDP socket. ngtcp2 does UDP Path MTU Discovery and it might send larger packet than the path can sustain. In this case ICMP message is received, it is resulted in POLLERR, which is translated into POLLIN by curl code. Because IP_RECVERR, the normal recvfrom call does not clear error queue, thus poll keeps returning POLLERR.
It is only cleared by recvmsg with MSG_ERRQUEUE. But it looks like there is no code in curl to do this.
[1]
curl/lib/connect.c
Lines 1670 to 1682 in e28edb6
I expected the following
curl/libcurl version
curl master branch with ngtcp2 QUIC backend
[curl -V output]
operating system
Linux
The text was updated successfully, but these errors were encountered: