By default, synchronously completed socket operations will still send completions, we currently don't mind that in winhttp. The most essential part is patch 1, which will also avoid stacking those completions. Patch 2 is not strictly necessary since now we indeed shouldn't be getting unexpected completions, but it seems to me it is better not to fully rely on that and skip unexpected ones just in case.