Thanks, I think you might be right in principle. But trying to test that now I see differences with the socket signaled state vs what I get on Win11. E. g.: checking signaled state with WaitForSingleObject right after the first send loop in my test indeed yields WAIT_OBJECT_0 on Windows. That's not the case in Wine, but also not the case without my patches (because server returned STATUS_ALERTED for the partial send and the async hasn't been removed yet). Then, suddenly, if I add select() for write sockets *before* the send loop, the same WaitForSingleObject(d.server, 0) returns STATUS_TIMEOUT on Windows.
So it probably needs much more testing around, I am not sure tweaking that set_fd_signaled() WRT the added flag in isolation without even testing that properly (and solving some orthogonal issues at the same time) makes too much sense. I don't feel too strong about that though, possibly just removing set_fd_signaled() for those background sends is a sensible thing on its own.