Skip to content

Commit 947e9eb

Browse files
committedDec 27, 2016
Fix TCP sequence number in multiple consecutive non-ACKed data packets.
1 parent 0c0ed84 commit 947e9eb

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed
 

‎src/socket/tcp.rs

+20
Original file line numberDiff line numberDiff line change
@@ -662,6 +662,7 @@ impl<'a> TcpSocket<'a> {
662662
// Send the extracted data.
663663
net_trace!("tcp:{}:{}: tx buffer: peeking at {} octets (from {})",
664664
self.local_endpoint, self.remote_endpoint, data.len(), offset);
665+
repr.seq_number += offset;
665666
repr.payload = data;
666667
// Speculatively shrink the remote window. This will get updated the next
667668
// time we receive a packet.
@@ -1035,6 +1036,25 @@ mod test {
10351036
assert_eq!(s.tx_buffer.len(), 0);
10361037
}
10371038

1039+
#[test]
1040+
fn test_established_send_no_ack_send() {
1041+
let mut s = socket_established();
1042+
s.tx_buffer.enqueue_slice(b"abcdef");
1043+
recv!(s, [TcpRepr {
1044+
seq_number: LOCAL_SEQ + 1,
1045+
ack_number: Some(REMOTE_SEQ + 1),
1046+
payload: &b"abcdef"[..],
1047+
..RECV_TEMPL
1048+
}]);
1049+
s.tx_buffer.enqueue_slice(b"foobar");
1050+
recv!(s, [TcpRepr {
1051+
seq_number: LOCAL_SEQ + 1 + 6,
1052+
ack_number: Some(REMOTE_SEQ + 1),
1053+
payload: &b"foobar"[..],
1054+
..RECV_TEMPL
1055+
}]);
1056+
}
1057+
10381058
#[test]
10391059
fn test_established_send_buf_gt_win() {
10401060
let mut s = socket_established();

0 commit comments

Comments
 (0)
Please sign in to comment.