Parcourir la source

Fix the TCP MSS calculation.

whitequark il y a 8 ans
Parent
commit
899a5a1963
1 fichiers modifiés avec 5 ajouts et 1 suppressions
  1. 5 1
      src/socket/tcp.rs

+ 5 - 1
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);
             }