From da4900a02b32a6cfd67628c26f29baf60202487b Mon Sep 17 00:00:00 2001 From: whitequark Date: Fri, 27 Jan 2017 03:35:22 +0000 Subject: [PATCH] Fix an incorrect payload length when sending TCP MSS option. --- src/socket/tcp.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/socket/tcp.rs b/src/socket/tcp.rs index ba0567c..14e23e1 100644 --- a/src/socket/tcp.rs +++ b/src/socket/tcp.rs @@ -965,6 +965,12 @@ impl<'a> TcpSocket<'a> { repr.ack_number = Some(ack_number); self.remote_last_ack = ack_number; + 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. + repr.max_seg_size = Some(0); + } + let ip_repr = IpRepr::Unspecified { src_addr: self.local_endpoint.addr, dst_addr: self.remote_endpoint.addr,