]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
ngtcp2: disconnect the QUIC connection proper
authorDaniel Stenberg <daniel@haxx.se>
Wed, 9 Mar 2022 13:16:47 +0000 (14:16 +0100)
committerDaniel Stenberg <daniel@haxx.se>
Thu, 10 Mar 2022 07:26:18 +0000 (08:26 +0100)
Reported-by: mehatzri on github
Reviewed-by: Tatsuhiro Tsujikawa
Fixes #8534
closes #8569

lib/vquic/ngtcp2.c

index aac092b8d2c0674ef77e94f253c06849cf9a321a..30596042bc28b3fd97b054f656a16c89e0ac1e96 100644 (file)
@@ -858,8 +858,23 @@ static int ng_getsock(struct Curl_easy *data, struct connectdata *conn,
 
 static void qs_disconnect(struct quicsocket *qs)
 {
+  char buffer[NGTCP2_MAX_UDP_PAYLOAD_SIZE];
+  ngtcp2_tstamp ts;
+  ngtcp2_ssize rc;
   if(!qs->conn) /* already closed */
     return;
+  ts = timestamp();
+  rc = ngtcp2_conn_write_connection_close(qs->qconn, NULL, /* path */
+                                          NULL, /* pkt_info */
+                                          (uint8_t *)buffer, sizeof(buffer),
+                                          0, /* error_code */
+                                          NULL, 0, /* reason + len */
+                                          ts);
+  if(rc > 0) {
+    while((send(qs->conn->sock[FIRSTSOCKET], buffer, rc, 0) == -1) &&
+          SOCKERRNO == EINTR);
+  }
+
   qs->conn = NULL;
   if(qs->qlogfd != -1) {
     close(qs->qlogfd);