Basically, there are three conditions:
* The receive buffer is full. Here, the receive buffer means either
the buffer we submit or the intermediate winsock buffer.
* 500ms has passed since the last arrival of data.
* Data arrives with the PUSH-bit set.
the original post is
here.