
Basically, in silly window avoidance, don't use the raw MSS we advertised to the peer. What we really want here is the _expected_ size of received segments, so we need to account for the path MTU (eventually; right now, the interface MTU for "local" addresses and loopback or tcp_mssdflt for non-local addresses). Without this, silly window avoidance would never kick in if we advertised a very large (e.g. ~64k) MSS to the peer.