Previously floated as an RFC on wine-devel (https://list.winehq.org/hyperkitty/list/wine-devel@list.winehq.org/thread/HV...); positive response, no objections, opening as an MR now. Problem. Windows select() reports a connected stream socket writable whenever send() would still accept data. Wine follows the host poll(), and on Linux POLLOUT is only raised once the send queue drains below ~2/3 of SO_SNDBUF. An app-limited sender that does a select() writability check before arming FD_WRITE (libcurl's multi loop, and anything built on it) sees "not writable" while its sends keep succeeding, and waits out its full poll timeout (~1s) between bursts, throttling single-stream uploads to ~140 KB/s. Found with a Backblaze B2 client. Fix. In poll_socket(), report a connected stream socket writable when TIOCOUTQ < SO_SNDBUF. Guarded by #ifdef TIOCOUTQ so behaviour is unchanged where it is unavailable. Why this is correct for Wine. It reproduces what the application observes on real Windows rather than fixing a Windows-side defect: native Windows reports the socket writable and runs the same client at full speed, while the Linux POLLOUT threshold is a host artefact invisible to the Windows application. Validated against real Windows and against Wine on a Linux guest. Test. dlls/ws2_32/tests adds a conformance test for the writability invariant marked todo_wine; the fix commit removes the todo. It counts invariant violations and asserts zero rather than asserting timing or throughput, to stay robust across CI configurations. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=59893 -- v2: server: Report a stream socket writable whenever a send would be accepted. ws2_32/tests: Test send writability and FD_WRITE after select. https://gitlab.winehq.org/wine/wine/-/merge_requests/11272