File tree Expand file tree Collapse file tree 1 file changed +6
-1
lines changed Expand file tree Collapse file tree 1 file changed +6
-1
lines changed Original file line number Diff line number Diff line change @@ -874,6 +874,7 @@ impl<'a> Socket<'a> {
874874 fn reset ( & mut self ) {
875875 let rx_cap_log2 =
876876 mem:: size_of :: < usize > ( ) * 8 - self . rx_buffer . capacity ( ) . leading_zeros ( ) as usize ;
877+ let new_rx_win_shift = rx_cap_log2. saturating_sub ( 16 ) as u8 ;
877878
878879 self . state = State :: Closed ;
879880 self . timer = Timer :: new ( ) ;
@@ -891,7 +892,10 @@ impl<'a> Socket<'a> {
891892 self . remote_last_win = 0 ;
892893 self . remote_win_len = 0 ;
893894 self . remote_win_scale = None ;
894- self . remote_win_shift = rx_cap_log2. saturating_sub ( 16 ) as u8 ;
895+ // keep user-specified window scaling across connect()/listen()
896+ if self . remote_win_shift < new_rx_win_shift {
897+ self . remote_win_shift = new_rx_win_shift;
898+ }
895899 self . remote_mss = DEFAULT_MSS ;
896900 self . remote_last_ts = None ;
897901 self . ack_delay_timer = AckDelayTimer :: Idle ;
@@ -2339,6 +2343,7 @@ impl<'a> Socket<'a> {
23392343 } else if self . timer . should_close ( cx. now ( ) ) {
23402344 // If we have spent enough time in the TIME-WAIT state, close the socket.
23412345 tcp_trace ! ( "TIME-WAIT timer expired" ) ;
2346+ self . remote_win_shift = 0 ;
23422347 self . reset ( ) ;
23432348 return Ok ( ( ) ) ;
23442349 } else {
You can’t perform that action at this time.
0 commit comments