Re[8]: Вопросы по асинх. TCP серверу с пулом потоков (IOCP)
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 30.01.11 10:50
Оценка:
Здравствуйте, Jolly Roger, Вы писали:

JR>>>Она всегда означает одно — в данный момент система не может выполнить запрошенную операцию с этим экземпляром сокета, необходимо попробовать повторить её позже. На WSARecv получить её маловероятно, разве что в случае грубой ошибки в логике.


N>>Ну почему же. Есть сообщение о возможности читать, читаем — раз, два, три... на очередной попытке чтения нам говорят, что данных больше нет, вот тогда прекращаем (и запрашиваем следующую нотификацию). Не заводить же сразу буфер на максимальный размер одной посылки? Это будет просто неэкономным.

N>>Так что [WSA]EWOULDBLOCK из чтения — абсолютно нормально.

JR>Да, в случае синхронного неблокирующего режима.


Не только. В сокет пришло 5 килобайт, а вычитывается порциями по 2 килобайта. Сколько чтений на одну нотификацию надо сделать? Безусловно больше одного

JR> А я рассматривал overlapped режим, автора топика ведь именно он интересует. Но Вы правы, следовало об этом явно сказать.


Угу, ещё и потому, что для асинхронного та же проблема. Или проверять, сколько ещё есть, в явных числах через что-то вроде FIONREAD, или долбиться до явного отказа.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.