diff src/event/ngx_event_udp.c @ 8735:9ce6d80df113 quic

QUIC: simplified quic connection dispatching. Currently listener contains rbtree with multiple nodes for single QUIC connection: each corresponding to specific server id. Each udp node points to same ngx_connection_t, which points to QUIC connection via c->udp field. Thus when an event handler is called, it only gets ngx_connection_t with c->udp pointing to QUIC connection. This makes it hard to obtain actual node which was used to dispatch packet (it requires to repeat DCID lookup). Additionally, ngx_quic_connection_t->udp field is only needed to keep a pointer in c->udp. The node is not added into the tree and does not carry useful information.
author Vladimir Homutov <vl@nginx.com>
date Fri, 02 Apr 2021 11:31:37 +0300
parents c61fcdc1b8e3
children 7f95010f10b7
line wrap: on
line diff
--- a/src/event/ngx_event_udp.c
+++ b/src/event/ngx_event_udp.c
@@ -684,6 +684,13 @@ ngx_lookup_udp_connection(ngx_listening_
         }
 
         if (rc == 0) {
+
+#if (NGX_QUIC)
+            if (ls->quic && c->udp != udp) {
+                c->udp = udp;
+            }
+#endif
+
             return c;
         }