В winsock синхронизация recv
и асинхронизация WSARecv
завершаются, как только в потоковом сокете появляются данные, независимо от указанного размера (который является только верхним пределом). Это означает, что для считывания фиксированного количества байтов из потока должна применяться некоторая пользовательская буферизация. И если каждое чтение не буферизуется отдельно, это приводит к двойной буферизации, то есть фактически существует два буфера на сокет.
Есть ли способ попросить winsock буферизовать данные от своего имени и завершить операцию только тогда, когда станет доступно указанное количество байтов (если не происходит ошибка)?
РЕДАКТИРОВАТЬ: Эта функция должна работать, в частности, для асинхронных сокетов.