https://bugs.winehq.org/show_bug.cgi?id=37669
--- Comment #5 from Sebastian Lackner sebastian@fds-team.de --- (In reply to Dmitry Timoshkov from comment #4)
(In reply to Sebastian Lackner from comment #2)
If I understand you correctly we already have a patch for that: https://github.com/wine-compholio/wine-staging/blob/master/patches/ws2_32- WriteWatches/0001-ws2_32-Avoid-race-conditions-of-async-WSARecv-operat.patch
This approach may lead to infinite retries if recvmsg will legitimately fail for an invalid buffer due to not write watch related activities in another thread.
I know, but your solution with copying memory has other disadvantages. I am not sure if allocating large amounts of memory (and then copying with an exception handler) is really better. Chances are relatively small that this will loop forever. Unfortunately there is no really perfect solution.