Re[9]: Вопросы по асинх. TCP серверу с пулом потоков (IOCP)
От: Jolly Roger  
Дата: 30.01.11 11:13
Оценка:
Здравствуйте, netch80, Вы писали:

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


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


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


N>Угу, ещё и потому, что для асинхронного та же проблема. Или проверять, сколько ещё есть, в явных числах через что-то вроде FIONREAD, или долбиться до явного отказа.


Не понял Читая по 2К, мы в случае синхронного неблокирующего режима получим EWOULDBLOCK на 4-й вызов.
В случае синхронного блокирующего 4-й вызов не завершится, пока либо не придут данные, либо не истечёт таймаут, либо не будет закрвто соединение. Ни в одном из этих случаев EWOULDBLOCK не будет возвращён.

В случае overlapped режима мы получим IO_PENDING. Далее, при приходе данных либо разрыве соединения к нам придёт уведомление об успешном завершении операции, либо код ошибки, соответствующий причине потери связи. EWOULDBLOCK к таким причинам не относится, и, соответственно, никогда в этом месте не возвращается.

В чём я не прав? Опишите сценарий, при котором WsaRecv вернёт ошибку в асинхронном (overlapped) режиме.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.