diff --git a/include/haproxy/xprt_quic-t.h b/include/haproxy/xprt_quic-t.h index a98373394..504294f12 100644 --- a/include/haproxy/xprt_quic-t.h +++ b/include/haproxy/xprt_quic-t.h @@ -778,6 +778,7 @@ struct quic_conn { unsigned int nb_pkt_since_cc; const struct qcc_app_ops *app_ops; + unsigned int sendto_err; }; #endif /* USE_QUIC */ diff --git a/src/quic_sock.c b/src/quic_sock.c index a0f8129f4..2cc5a7f03 100644 --- a/src/quic_sock.c +++ b/src/quic_sock.c @@ -341,11 +341,11 @@ size_t qc_snd_buf(struct quic_conn *qc, const struct buffer *buf, size_t count, } else if (ret == 0 || errno == EAGAIN || errno == EWOULDBLOCK || errno == ENOTCONN || errno == EINPROGRESS) { /* TODO must be handle properly. It is justified for UDP ? */ - ABORT_NOW(); + qc->sendto_err++; } else if (errno != EINTR) { /* TODO must be handle properly. It is justified for UDP ? */ - ABORT_NOW(); + qc->sendto_err++; } } diff --git a/src/xprt_quic.c b/src/xprt_quic.c index 524c42d2e..ffdbe771a 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -552,7 +552,7 @@ static void quic_trace(enum trace_level level, uint64_t mask, const struct trace if (mask & QUIC_EV_CONN_SPPKTS) { const struct quic_tx_packet *pkt = a2; - chunk_appendf(&trace_buf, " cwnd=%llu ppif=%llu pif=%llu", + chunk_appendf(&trace_buf, " err=%u cwnd=%llu ppif=%llu pif=%llu", qc->sendto_err, (unsigned long long)qc->path->cwnd, (unsigned long long)qc->path->prep_in_flight, (unsigned long long)qc->path->in_flight); @@ -3180,6 +3180,7 @@ int qc_send_ppkts(struct qring *qr, struct ssl_sock_ctx *ctx) qc = ctx->qc; cbuf = qr->cbuf; + TRACE_ENTER(QUIC_EV_CONN_SPPKTS, qc); while (cb_contig_data(cbuf)) { unsigned char *pos; struct buffer tmpbuf = { }; @@ -3256,6 +3257,8 @@ int qc_send_ppkts(struct qring *qr, struct ssl_sock_ctx *ctx) } } + TRACE_LEAVE(QUIC_EV_CONN_SPPKTS, qc); + return 1; } @@ -4392,6 +4395,7 @@ static struct quic_conn *qc_new_conn(unsigned int version, int ipv4, qc->streams_by_id = EB_ROOT_UNIQUE; qc->stream_buf_count = 0; + qc->sendto_err = 0; TRACE_LEAVE(QUIC_EV_CONN_INIT, qc);