From 255d69d63b8afcd7a488754917b3432b6d029f07 Mon Sep 17 00:00:00 2001 From: whitequark Date: Tue, 31 Jan 2017 11:39:33 +0000 Subject: [PATCH] Fix the TCP MSS calculation. --- src/socket/tcp.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/socket/tcp.rs b/src/socket/tcp.rs index 14e23e1..49cc83b 100644 --- a/src/socket/tcp.rs +++ b/src/socket/tcp.rs @@ -965,6 +965,10 @@ impl<'a> TcpSocket<'a> { repr.ack_number = Some(ack_number); self.remote_last_ack = ack_number; + // Remember the header length before enabling the MSS option, since that option + // only affects SYN packets. + let header_len = repr.header_len(); + if repr.control == TcpControl::Syn { // First enable the option, without assigning any value, to get a correct // result for (ip_repr:Unspecified).payload_len below. @@ -980,7 +984,7 @@ impl<'a> TcpSocket<'a> { let ip_repr = try!(ip_repr.lower(&[])); if repr.control == TcpControl::Syn { - let mtu = mtu - repr.header_len() - ip_repr.buffer_len(); + let mtu = mtu - header_len - ip_repr.buffer_len(); repr.max_seg_size = Some(mtu as u16); }