Skip to content

Commit 66e3684

Browse files
committedAug 28, 2017
Add a test for TCP sockets returning ACKs even with zero window.
1 parent 8ae9b21 commit 66e3684

File tree

1 file changed

+29
-2
lines changed

1 file changed

+29
-2
lines changed
 

‎src/socket/tcp.rs

+29-2
Original file line numberDiff line numberDiff line change
@@ -720,8 +720,7 @@ impl<'a> TcpSocket<'a> {
720720
reply_repr.control = TcpControl::Rst;
721721
reply_repr.seq_number = repr.ack_number.unwrap_or_default();
722722
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());
725724
}
726725

727726
(ip_reply_repr, reply_repr)
@@ -2895,4 +2894,32 @@ mod test {
28952894
..RECV_TEMPL
28962895
})));
28972896
}
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+
}
28982925
}

0 commit comments

Comments
 (0)
Please sign in to comment.