diff options
author | Mithun Iyer <iyerm@google.com> | 2021-06-04 23:37:01 -0700 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-06-04 23:39:44 -0700 |
commit | 03f17c7d902945489f44bbd4e0c6e15695098b52 (patch) | |
tree | d610ea338a925ee19855e2c588bce59344426090 /pkg/segment/range.go | |
parent | a2d340739649862a23d86f3e32f1bb3b928697ef (diff) |
Honor data and FIN from the ACK completing handshake
If the ACK completing the handshake has FIN or data, requeue the segment
for further processing by the newly established endpoint. Otherwise,
the segments would have to be retransmitted by the peer to be processed
by the established endpoint. Doing this, keeps the behavior in parity
with Linux.
This also addresses a test flake with TCPNonBlockingConnectClose where
the ACK (completing the handshake) and multiple retransmitted FINACKs
from the peer could be dropped by the listener, when using syncookies
and the accept queue is full. The handshake could eventually get
completed with a retransmitted FINACK, without actual processing of
FIN. This can cause the poll with POLLRDHUP on the accepted socket to
sometimes time out before the next FINACK retransmission.
PiperOrigin-RevId: 377651695
Diffstat (limited to 'pkg/segment/range.go')
0 files changed, 0 insertions, 0 deletions