Mercurial > hg > nginx-quic
comparison src/event/quic/ngx_event_quic_migration.c @ 8547: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
8546:d80365ca678d | 8547: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 |