hypercorn
hypercorn copied to clipboard
`QUIC: recvmsg() unexpectedly returned -1 (errno=90; Message too long)`
Due to localhost port restriction, I have to carry out this test in a local microk8s cluster where I only enable UDP protocol to port 443. Curl hits the following error: Nodeport:
svc-pythonrestapi-nodeport NodePort 10.152.183.195 <none> 443:31002/UDP 5m10s
$ curl --http3 --insecure -v https://10.152.183.195
* Trying 10.152.183.195:443...
* GnuTLS priority: NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+AES-256-GCM:+CHACHA20-POLY1305:+AES-128-CCM:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-X25519:+GROUP-SECP384R1:+GROUP-SECP521R1:%DISABLE_TLS13_COMPAT_MODE
* Connected to 10.152.183.195 (10.152.183.195) port 443
* using HTTP/3
* [HTTP/3] [0] OPENED stream for https://10.152.183.195/
* [HTTP/3] [0] [:method: GET]
* [HTTP/3] [0] [:scheme: https]
* [HTTP/3] [0] [:authority: 10.152.183.195]
* [HTTP/3] [0] [:path: /]
* [HTTP/3] [0] [user-agent: curl/8.13.0-DEV]
* [HTTP/3] [0] [accept: */*]
> GET / HTTP/3
> Host: 10.152.183.195
> User-Agent: curl/8.13.0-DEV
> Accept: */*
>
* Request completely sent off
* QUIC: recvmsg() unexpectedly returned -1 (errno=90; Message too long)
* Connection #0 to host 10.152.183.195 left intact
curl: (56) QUIC: recvmsg() unexpectedly returned -1 (errno=90; Message too long)
If I leave TCP port open, it turns out that both Chrome and Firefox always connect through TCP protocol and therefore HTTP/2 instead of 3? https://github.com/pgjones/hypercorn/issues/292
$ curl --http3 --insecure -vv https://10.152.183.195
18:45:18.093399 [0-0] * [HTTPS-CONNECT] adding wanted h3
18:45:18.093457 [0-0] * [HTTPS-CONNECT] adding wanted h2
18:45:18.093467 [0-0] * [HTTPS-CONNECT] added
18:45:18.093482 [0-0] * [HTTPS-CONNECT] connect, init
18:45:18.093492 [0-0] * [HTTPS-CONNECT] set next attempt to start in 50ms
18:45:18.093518 [0-0] * Trying 10.152.183.195:443...
18:45:18.093692 [0-0] * [HTTP/3] gnutls_init(flags=202), earlydata=0
18:45:18.093799 [0-0] * GnuTLS priority: NORMAL:-VERS-ALL:+VERS-TLS1.3:-CIPHER-ALL:+AES-128-GCM:+AES-256-GCM:+CHACHA20-POLY1305:+AES-128-CCM:-GROUP-ALL:+GROUP-SECP256R1:+GROUP-X25519:+GROUP-SECP384R1:+GROUP-SECP521R1:%DISABLE_TLS13_COMPAT_MODE
18:45:18.094187 [0-0] * [HTTP/3] SSL message: -> ClientHello [1]
18:45:18.094382 [0-0] * [HTTP/3] vquic_send(len=1200, gso=1200) -> 0, sent=1200
18:45:18.094398 [0-0] * [HTTPS-CONNECT] connect -> 0, done=0
18:45:18.094425 [0-0] * [HTTPS-CONNECT] Curl_conn_connect(block=0) -> 0, done=0
18:45:18.094441 [0-0] * [HTTPS-CONNECT] adjust_pollset -> 1 socks
18:45:18.109017 [0-0] * [HTTP/3] loading trust anchors and CRLs
18:45:18.109081 [0-0] * [HTTP/3] recvmmsg() -> 3 packets
18:45:18.109247 [0-0] * [HTTP/3] SSL message: <- ServerHello [2]
18:45:18.109317 [0-0] * [HTTP/3] SSL message: <- EncryptedExtensions [8]
18:45:18.109361 [0-0] * [HTTP/3] SSL message: <- Certificate [11]
18:45:18.109383 [0-0] * [HTTP/3] SSL message: <- CertificateVerify [15]
18:45:18.109644 [0-0] * [HTTP/3] SSL message: <- Finished [20]
18:45:18.109669 [0-0] * [HTTP/3] SSL message: -> Finished [20]
18:45:18.109752 [0-0] * [HTTP/3] handshake complete after 16ms
18:45:18.109761 [0-0] * [HTTP/3] max bidi streams now 128, used 0
18:45:18.109782 [0-0] * [HTTP/3] [3] read_stream(len=12) -> 12
18:45:18.109792 [0-0] * [HTTP/3] [7] read_stream(len=1) -> 1
18:45:18.109801 [0-0] * [HTTP/3] [11] read_stream(len=1) -> 1
18:45:18.109814 [0-0] * [HTTP/3] ingress, recvmmsg -> EAGAIN
18:45:18.109824 [0-0] * [HTTP/3] recvd 3 packets with 2717 bytes -> 0
18:45:18.109883 [0-0] * [HTTP/3] vquic_send_tail_split: [1200 gso=1200][1406 gso=1406]
18:45:18.109943 [0-0] * [HTTP/3] vquic_send(len=1200, gso=1200) -> 0, sent=1200
18:45:18.109968 [0-0] * [HTTP/3] vquic_send(len=1406, gso=1406) -> 0, sent=1406
18:45:18.110005 [0-0] * [HTTP/3] peer verified
18:45:18.110019 [0-0] * [HTTP/3] connect -> 0, done=1
18:45:18.110032 [0-0] * [HTTPS-CONNECT] connect+handshake h3: 16ms, 1st data: 15ms
18:45:18.110048 [0-0] * [HTTPS-CONNECT] connect -> 0, done=1
18:45:18.110058 [0-0] * [HTTPS-CONNECT] Curl_conn_connect(block=0) -> 0, done=1
18:45:18.110078 [0-0] * Connected to 10.152.183.195 (10.152.183.195) port 443
18:45:18.110096 [0-0] * using HTTP/3
18:45:18.110123 [0-0] * [HTTP/3] ingress, recvmmsg -> EAGAIN
18:45:18.110147 [0-0] * [HTTP/3] [0] OPENED stream for https://10.152.183.195/
18:45:18.110163 [0-0] * [HTTP/3] [0] [:method: GET]
18:45:18.110181 [0-0] * [HTTP/3] [0] [:scheme: https]
18:45:18.110198 [0-0] * [HTTP/3] [0] [:authority: 10.152.183.195]
18:45:18.110216 [0-0] * [HTTP/3] [0] [:path: /]
18:45:18.110237 [0-0] * [HTTP/3] [0] [user-agent: curl/8.13.0-DEV]
18:45:18.110254 [0-0] * [HTTP/3] [0] [accept: */*]
18:45:18.110290 [0-0] * [HTTP/3] vquic_send(len=73, gso=73) -> 0, sent=73
18:45:18.110311 [0-0] * [HTTP/3] [0] cf_send(len=80) -> 80, 0
18:45:18.110330 [0-0] > GET / HTTP/3
18:45:18.110330 [0-0] > Host: 10.152.183.195
18:45:18.110330 [0-0] > User-Agent: curl/8.13.0-DEV
18:45:18.110330 [0-0] > Accept: */*
18:45:18.110330 [0-0] >
18:45:18.110434 [0-0] * [HTTP/3] ingress, recvmmsg -> EAGAIN
18:45:18.110453 [0-0] * [HTTP/3] [0] cf_recv(blen=102400) -> -1, 81
18:45:18.110472 [0-0] * Request completely sent off
18:45:18.111096 [0-0] * [HTTP/3] recvmmsg() -> 1 packets
18:45:18.111121 [0-0] * [HTTP/3] ingress, recvmmsg -> EAGAIN
18:45:18.111139 [0-0] * [HTTP/3] recvd 1 packets with 68 bytes -> 0
18:45:18.111172 [0-0] * [HTTP/3] vquic_send(len=42, gso=42) -> 0, sent=42
18:45:18.111188 [0-0] * [HTTP/3] [0] cf_recv(blen=102400) -> -1, 81
18:45:18.111206 [0-0] * [HTTP/3] data idle
18:45:18.111306 [0-0] * [HTTP/3] recvmmsg() -> 1 packets
18:45:18.111329 [0-0] * [HTTP/3] ingress, recvmmsg -> EAGAIN
18:45:18.111348 [0-0] * [HTTP/3] recvd 1 packets with 44 bytes -> 0
18:45:18.111394 [0-0] * [HTTP/3] vquic_send(len=1444, gso=1444) -> 0, sent=1444
18:45:18.111407 [0-0] * [HTTP/3] [0] cf_recv(blen=102400) -> -1, 81
18:45:18.111423 [0-0] * [HTTP/3] data idle
18:45:18.111504 [0-0] * QUIC: recvmsg() unexpectedly returned -1 (errno=90; Message too long)
18:45:18.111522 [0-0] * [HTTP/3] recvd 0 packets with 0 bytes -> 56
18:45:18.111541 [0-0] * [HTTP/3] [0] cf_recv(blen=102400) -> -1, 56
18:45:18.111561 [0-0] * [HTTP/3] [0] easy handle is done
18:45:18.111598 [0-0] * [HTTP/3] vquic_send(len=84, gso=42) -> 0, sent=84
18:45:18.111617 [0-0] * Connection #0 to host 10.152.183.195 left intact
curl: (56) QUIC: recvmsg() unexpectedly returned -1 (errno=90; Message too long)
https://github.com/curl/curl/issues/16846
This happens when curl and chrome does not specify the default port number 443. Is this expected? https://www.chromium.org/quic/quic-faq/