@@ -720,8 +720,7 @@ impl<'a> TcpSocket<'a> {
720
720
reply_repr. control = TcpControl :: Rst ;
721
721
reply_repr. seq_number = repr. ack_number . unwrap_or_default ( ) ;
722
722
if repr. control == TcpControl :: Syn {
723
- reply_repr. ack_number = Some ( repr. seq_number +
724
- repr. segment_len ( ) ) ;
723
+ reply_repr. ack_number = Some ( repr. seq_number + repr. segment_len ( ) ) ;
725
724
}
726
725
727
726
( ip_reply_repr, reply_repr)
@@ -2895,4 +2894,32 @@ mod test {
2895
2894
..RECV_TEMPL
2896
2895
} ) ) ) ;
2897
2896
}
2897
+
2898
+ #[ test]
2899
+ fn test_zero_window_ack ( ) {
2900
+ let mut s = socket_established ( ) ;
2901
+ s. rx_buffer = SocketBuffer :: new ( vec ! [ 0 ; 6 ] ) ;
2902
+ send ! ( s, TcpRepr {
2903
+ seq_number: REMOTE_SEQ + 1 ,
2904
+ ack_number: Some ( LOCAL_SEQ + 1 ) ,
2905
+ payload: & b"abcdef" [ ..] ,
2906
+ ..SEND_TEMPL
2907
+ } , Ok ( Some ( TcpRepr {
2908
+ seq_number: LOCAL_SEQ + 1 ,
2909
+ ack_number: Some ( REMOTE_SEQ + 1 + 6 ) ,
2910
+ window_len: 0 ,
2911
+ ..RECV_TEMPL
2912
+ } ) ) ) ;
2913
+ send ! ( s, TcpRepr {
2914
+ seq_number: REMOTE_SEQ + 1 + 6 ,
2915
+ ack_number: Some ( LOCAL_SEQ + 1 ) ,
2916
+ payload: & b"123456" [ ..] ,
2917
+ ..SEND_TEMPL
2918
+ } , Ok ( Some ( TcpRepr {
2919
+ seq_number: LOCAL_SEQ + 1 ,
2920
+ ack_number: Some ( REMOTE_SEQ + 1 + 6 ) ,
2921
+ window_len: 0 ,
2922
+ ..RECV_TEMPL
2923
+ } ) ) ) ;
2924
+ }
2898
2925
}
0 commit comments