Silly Window Syndrome Prevention Timer
An offload target can optionally implement a Silly Window Syndrome (SWS) prevention timer for each offloaded TCP connection. The offload target uses the SWS prevention timer to suppress the transmission of TCP segments that contain less than the maximum segment size (MSS) of data.
To implement SWS prevention, an offload target must suppress sending a segment when all of the following are true:
The offload target has less than MSS data to send.
There is not enough send data to reach a send-request boundary (that is, fill the buffers that are associated with a NET_BUFFER_LIST structure).
The amount of send data is less than half the maximum window size that the offload target has seen thus far on the connection.
When all these conditions are met, the offload target starts its SWS prevention timer. When the timer expires, the offload target sends as much data as the window will allow.
The SWS prevention timer count is not preserved across initiate offload and terminate offload operations.
Before offloading a TCP connection, the host stack stops its SWS prevention timer for the connection. After the connection has been offloaded, the offload target can do either of the following:
Restart its SWS prevention timer for the connection.
Immediately transmit any send data that the host stack has passed to the offload target during the initiate offload operation. (For more information about handling such data, see Handling Outstanding Send Data During and After an Offload Operation.)
Before terminating the offload of a TCP connection, an offload target stops its SWS prevention timer for the connection. In addition to uploading the connection, the offload target can also upload send data for the connection. (For more information about such send data, see Handling Outstanding Send Data During a Terminate Offload Operation.) After the connection has been uploaded, the host stack always restarts its SWS prevention timer timer for the connection.