WSASend behaviour / gRPC compatibility

Zebediah Figura (she/her) zfigura at codeweavers.com
Thu Jan 6 12:07:03 CST 2022


On 1/6/22 08:40, Ruud Schramp wrote:
> Hello All,
> 
> I am trying to run a Python gRPC application in WINE.
> 
> It turns out the gRPC Windows binding uses WSASend which first tries the 
> "blocking" variant on a overlapped socket.
> 
> Based on the code, the EXPECTED behaviour is that WSASend is atomic: It 
> either sends nothing and  reports WSAEWOULDBLOCK, or it sends everything 
> and reports SUCCESS.
> 
> The behaviour in WINE is:
> It sends upto the TCP Congestion window, and I haven't seen it report 
> WSAEWOULDBLOCK. (WSASend() returns 0)

Actually this isn't so much Wine's behaviour as it is the behaviour of 
the host OS. We simply pass through the same parameters to the host send().

It turns out to be more than a little difficult to provide Windows 
compatibility here. We would probably need to perform some manual 
buffering in wineserver.

> 
> Anyone observed this before? How do other programs handle this?

Usually programs don't care. That is, they follow the POSIX 
documentation, and correctly handle short writes. It would be ideal if 
gRPC can do this as well.

> 
> I reported the same issue at the gRPC group 
> https://groups.google.com/g/grpc-io/c/-RzRZ867jy0
> 
> Best regards,
> 
> Ruud



More information about the wine-devel mailing list