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