comparison src/event/quic/ngx_event_quic_migration.c @ 8822:ad046179eb91 quic

QUIC: handle EAGAIN properly on UDP sockets. Previously, the error was ignored leading to unnecessary retransmits. Now, unsent frames are returned into output queue, state is reset, and timer is started for the next send attempt.
author Vladimir Homutov <vl@nginx.com>
date Wed, 28 Jul 2021 17:23:18 +0300
parents 4715f3e669f1
children a951e0809044
comparison
equal deleted inserted replaced
8821:d80365ca678d 8822:ad046179eb91
53 max = path->received * 3; 53 max = path->received * 3;
54 max = (path->sent >= max) ? 0 : max - path->sent; 54 max = (path->sent >= max) ? 0 : max - path->sent;
55 pad = ngx_min(1200, max); 55 pad = ngx_min(1200, max);
56 56
57 sent = ngx_quic_frame_sendto(c, &frame, pad, path->sockaddr, path->socklen); 57 sent = ngx_quic_frame_sendto(c, &frame, pad, path->sockaddr, path->socklen);
58 if (sent == -1) { 58 if (sent < 0) {
59 return NGX_ERROR; 59 return NGX_ERROR;
60 } 60 }
61 61
62 path->sent += sent; 62 path->sent += sent;
63 63
604 max = path->received * 3; 604 max = path->received * 3;
605 max = (path->sent >= max) ? 0 : max - path->sent; 605 max = (path->sent >= max) ? 0 : max - path->sent;
606 pad = ngx_min(1200, max); 606 pad = ngx_min(1200, max);
607 607
608 sent = ngx_quic_frame_sendto(c, &frame, pad, path->sockaddr, path->socklen); 608 sent = ngx_quic_frame_sendto(c, &frame, pad, path->sockaddr, path->socklen);
609 if (sent == -1) { 609 if (sent < 0) {
610 return NGX_ERROR; 610 return NGX_ERROR;
611 } 611 }
612 612
613 path->sent += sent; 613 path->sent += sent;
614 614
616 616
617 max = (path->sent >= max) ? 0 : max - path->sent; 617 max = (path->sent >= max) ? 0 : max - path->sent;
618 pad = ngx_min(1200, max); 618 pad = ngx_min(1200, max);
619 619
620 sent = ngx_quic_frame_sendto(c, &frame, pad, path->sockaddr, path->socklen); 620 sent = ngx_quic_frame_sendto(c, &frame, pad, path->sockaddr, path->socklen);
621 if (sent == -1) { 621 if (sent < 0) {
622 return NGX_ERROR; 622 return NGX_ERROR;
623 } 623 }
624 624
625 path->sent += sent; 625 path->sent += sent;
626 626