Здравствуйте, Jolly Roger, Вы писали:
JR>>>Она всегда означает одно — в данный момент система не может выполнить запрошенную операцию с этим экземпляром сокета, необходимо попробовать повторить её позже. На WSARecv получить её маловероятно, разве что в случае грубой ошибки в логике.
N>>Ну почему же. Есть сообщение о возможности читать, читаем — раз, два, три... на очередной попытке чтения нам говорят, что данных больше нет, вот тогда прекращаем (и запрашиваем следующую нотификацию). Не заводить же сразу буфер на максимальный размер одной посылки? Это будет просто неэкономным.
N>>Так что [WSA]EWOULDBLOCK из чтения — абсолютно нормально.
JR>Да, в случае синхронного неблокирующего режима.
Не только. В сокет пришло 5 килобайт, а вычитывается порциями по 2 килобайта. Сколько чтений на одну нотификацию надо сделать? Безусловно больше одного
JR> А я рассматривал overlapped режим, автора топика ведь именно он интересует. Но Вы правы, следовало об этом явно сказать.
Угу, ещё и потому, что для асинхронного та же проблема. Или проверять, сколько ещё есть, в явных числах через что-то вроде FIONREAD, или долбиться до явного отказа.