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 @@ -856,6 +856,7 @@ impl<'a> Socket<'a> {
856856 fn reset ( & mut self ) {
857857 let rx_cap_log2 =
858858 mem:: size_of :: < usize > ( ) * 8 - self . rx_buffer . capacity ( ) . leading_zeros ( ) as usize ;
859+ let new_rx_win_shift = rx_cap_log2. saturating_sub ( 16 ) as u8 ;
859860
860861 self . state = State :: Closed ;
861862 self . timer = Timer :: new ( ) ;
@@ -873,7 +874,10 @@ impl<'a> Socket<'a> {
873874 self . remote_last_win = 0 ;
874875 self . remote_win_len = 0 ;
875876 self . remote_win_scale = None ;
876- self . remote_win_shift = rx_cap_log2. saturating_sub ( 16 ) as u8 ;
877+ // keep user-specified window scaling across connect()/listen()
878+ if self . remote_win_shift < new_rx_win_shift {
879+ self . remote_win_shift = new_rx_win_shift;
880+ }
877881 self . remote_mss = DEFAULT_MSS ;
878882 self . remote_last_ts = None ;
879883 self . ack_delay_timer = AckDelayTimer :: Idle ;
@@ -2308,6 +2312,7 @@ impl<'a> Socket<'a> {
23082312 } else if self . timer . should_close ( cx. now ( ) ) {
23092313 // If we have spent enough time in the TIME-WAIT state, close the socket.
23102314 tcp_trace ! ( "TIME-WAIT timer expired" ) ;
2315+ self . remote_win_shift = 0 ;
23112316 self . reset ( ) ;
23122317 return Ok ( ( ) ) ;
23132318 } else {
You can’t perform that action at this time.
0 commit comments