MINOR: quic: Do not reset a full RX buffer
As the RX buffer is not consumed by the sock i/o handler as soon as a datagram
is produced, when full an RX buffer must not be reset. The remaining room is
consumed without modifying it. The consumer has a represention of its contents:
a list of datagrams.
diff --git a/src/quic_sock.c b/src/quic_sock.c
index 468cf64..37e7f1b 100644
--- a/src/quic_sock.c
+++ b/src/quic_sock.c
@@ -173,7 +173,7 @@
struct quic_transport_params *params;
/* Source address */
struct sockaddr_storage saddr = {0};
- size_t max_sz;
+ size_t max_sz, cspace;
socklen_t saddrlen;
struct quic_dgram *dgram, *dgramp, *new_dgram;
@@ -207,9 +207,10 @@
params = &l->bind_conf->quic_params;
max_sz = params->max_udp_payload_size;
- if (b_contig_space(buf) < max_sz) {
- /* Note that when we enter this function, <buf> is always empty */
- b_reset(buf);
+ cspace = b_contig_space(buf);
+ if (cspace < max_sz) {
+ /* Consume the remaining space */
+ b_add(buf, cspace);
if (b_contig_space(buf) < max_sz)
goto out;
}