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