http://bugs.winehq.org/show_bug.cgi?id=7506
------- Additional Comments From damjan.jov@gmail.com 2007-29-05 02:20 ------- "I thought send() is supposed to take care of buffering, delays, etc."
UNIX semantics of send/write: if there is any free space in the buffer, copy as much of the given data as will fit into the buffer, and return immediately. If there is no free space in the buffer, wait until any space becomes available, write as many bytes as can instantly be written, and return immediately.
Windows semantics of blocking send: send the entire buffer given, waiting as long as necessary, and only return when either the full amount is sent, or an error occurs.
So a short write/send are perfectly normal on UNIX, but on Windows they're not. That's why the bug went undetected for so long. As far as I am concerned this is an evil ploy by Microsoft - because their semantics are a subset of the UNIX semantics, UNIX software can be simply recompiled to work on Windows, but software made for Windows needs a lot more work to port to UNIX.
My patch makes send() loop until the entire buffer is written, as some Windows apps clearly expect. It went in a few versions back, so try the latest version of wine and report whether it fixes your apps.