In winsock, both the sync recv
and the async WSARecv
complete as soon as there is data available in a stream socket, regardless of the size specified (which is only the upper limit). This means that in order to read a fixed number of bytes from the stream, there should be applied some custom buffering. And unless each read is buffered seperately, it results in double buffering, that is, there are actually two buffers per socket.
Is there any way to ask winsock to buffer the data on it's own behalf and only complete the operation when the specified number of bytes become available (unless an error occurs)?
EDIT: This functionality should work for async sockets in particular.