Please be clear about the difference between _segments_ and _fragments_. Berend De Schouwer wrote: > In net/ipv4/tcp_output.c there is a chunk of code: > > /* Bound mss with half of window */ > if (tp->max_window && mss_now > (tp->max_window>>1)) > mss_now = max((tp->max_window>>1), 68U - tp->tcp_header_len); > > which means the first packet is half of 536, or 268 bytes. > If I change it, I can connect. > > Why /2? Why not run: > > /* Bound mss with window */ > if (tp->max_window && mss_now > (tp->max_window)) > mss_now = max((tp->max_window), 68U - tp->tcp_header_len); Why do you want to make the MSS larger? You said: > The server doesn't reassemble fragments, so I need to send 311 bytes > of data on a TCP stream, in one fragment. Making the MSS smaller doesn't create any fragments. It makes more TCP segments, but does not create any IP fragments (which are pieces of segments, when a segment is too large for an interface to transmit as one IP packet). Do you instead mean that the server doesn't reassemble _segments_? Even when those segments are transmitted consecutively? If that's true, it is a very limited TCP implementation indeed. -- Jamie - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html