I think waiting for POLLOUT and immediately sent as soon as it is available, even if Linux signals POLLOUT when some fraction of buffer is already sent, should surely work fine, it is one of the supposed ways to transfer bulk data and should not be the subject for slowdown. As I understand the problem with curl is that it will check for write once, see it is not ready (while there is some 1/3 of send buffer available) and then next time try to send way too late so the speed is low (or if it is not the case, what is the actual problem then, do we understand it?). That should not be the case with async buffer send, there is no benefit of async sending early at 1/3 buffer compared to sending later; in fact, the opposite, we are better off avoiding extra async server roundtrips by writing socket in bigger chunks. It is not like I am completely opposed to originally suggested approach, it is just that it seems to rely on some internal Linux sockets functioning (maybe also soubject to setup / some tunables??) and thus potentially the point of different behaviour across systems. While also not making things work just like Windows. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/11272#note_144858