Re[4]: completion port, WSARecv, buflen
От: Aspire  
Дата: 18.02.09 23:02
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:
MC>Никак. Ты заказал операцию ввода/вывода, по ее окончании тебе пришло уведомление. В уведомлении сказано, сколько байт было передано или принято. В пределах [0 ... заказанное количество].

В таком случае, обработка события на порту завершения теряет всякий смысл, поскольку, я не могу произвести никаких действий пока не придут все данные. Память не освободить, сообщение об успехе в гуи не послать и тд..

MC>Не понял проблемы.


Вытекает из предыдущей.

А>>Может, забить на колбэк порта и стартовать обработчик по эвэнту?


MC>Не знаю. Не совсем понятно, что ты понимаешь под "колбэк порта", и чем "обработчик по эвэнту" лучше него.


Ну, допустим у нас есть поток, который ждет события "все данные получены/отправлены", которое я взвожу, когда WSARecv/WSASend после нуля возвратят WSA_IO_PENDING. С этим событием поток стартует и подчищает ресурсы, посылает сообщения и пр. Преимущество в том, что в этом случае, не производя никаких вычислений по кол-ву отправленных/принятых байт мы узнаем о завершении ввода всего кол-ва данных.

А вообще, хотелось бы линк на пример использования порта завершения при операциях чтения/записи на сокетах, чтобы понять как это было бы по правильному при большом потоке данных. Все классические примеры в гугле рассмативают IOCP в применении к accept.

В принципе-то, рабочий пример я накатал, но не могу понять как обрабатывать события, если все данные не получить/отправить за один вызов.

Michael Chelnokov, спасибо за участие.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.