diff --git a/include/haproxy/quic_stats-t.h b/include/haproxy/quic_stats-t.h index 8a682285c..707825e4a 100644 --- a/include/haproxy/quic_stats-t.h +++ b/include/haproxy/quic_stats-t.h @@ -56,6 +56,7 @@ struct quic_counters { long long dropped_parsing; /* total number of dropped packets upon parsing errors */ long long socket_full; /* total number of EAGAIN errors on sendto() calls */ long long sendto_err; /* total number of errors on sendto() calls, EAGAIN excepted */ + long long sendto_err_unknown; /* total number of errors on sendto() calls which are currently not supported */ long long lost_pkt; /* total number of lost packets */ long long too_short_initial_dgram; /* total number of too short datagrams with Initial packets */ long long retry_sent; /* total number of Retry sent */ diff --git a/src/quic_sock.c b/src/quic_sock.c index 861748920..29f30ccbe 100644 --- a/src/quic_sock.c +++ b/src/quic_sock.c @@ -536,14 +536,14 @@ int qc_snd_buf(struct quic_conn *qc, const struct buffer *buf, size_t sz, } while (ret < 0 && errno == EINTR); if (ret < 0 || ret != sz) { + struct proxy *prx = qc->li->bind_conf->frontend; + struct quic_counters *prx_counters = + EXTRA_COUNTERS_GET(prx->extra_counters_fe, + &quic_stats_module); + /* TODO adjust errno for UDP context. */ if (errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOTCONN || errno == EINPROGRESS || errno == EBADF) { - struct proxy *prx = qc->li->bind_conf->frontend; - struct quic_counters *prx_counters = - EXTRA_COUNTERS_GET(prx->extra_counters_fe, - &quic_stats_module); - if (errno == EAGAIN || errno == EWOULDBLOCK) HA_ATOMIC_INC(&prx_counters->socket_full); else @@ -551,7 +551,7 @@ int qc_snd_buf(struct quic_conn *qc, const struct buffer *buf, size_t sz, } else if (errno) { /* TODO unlisted errno : handle it explicitly. */ - ABORT_NOW(); + HA_ATOMIC_INC(&prx_counters->sendto_err_unknown); } return 1;