tcp: avoid overflow of the advertised window with window scaling enabled
tcp_segment_header.advertised_window is 16 bits. Previously, instead of using the maximum window, zero would be sent, thus the partner wouldn't send anything. fix #18337 Change-Id: Ibff98ee58b84bdf52527a7821648a5faf20c5589 Reviewed-on: https://review.haiku-os.org/c/haiku/+/6359 Tested-by: Commit checker robot <[email protected]> Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
7bfc9c6fc7
commit
7c58a5a3fb
@@ -2067,9 +2067,8 @@ TCPEndpoint::_SendQueued(bool force, uint32 sendWindow)
|
||||
availableBytes = (fReceiveMaxAdvertised - fReceiveNext).Number();
|
||||
|
||||
if (fFlags & FLAG_OPTION_WINDOW_SCALE)
|
||||
segment.advertised_window = availableBytes >> fReceiveWindowShift;
|
||||
else
|
||||
segment.advertised_window = min_c(TCP_MAX_WINDOW, availableBytes);
|
||||
availableBytes >>= fReceiveWindowShift;
|
||||
segment.advertised_window = min_c(TCP_MAX_WINDOW, availableBytes);
|
||||
|
||||
segment.acknowledge = fReceiveNext.Number();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user