Здравствуйте, Michael Chelnokov, Вы писали:
MC>Здравствуйте, Aspire, Вы писали:
MC>Колбэк на порту завершения будет вызван:
MC>... на каждый успешный вызов WSARecv. Вызов WSARecv считается успешным, если он вернул 0 или ошибку WSA_IO_PENDING.
MC>Это единственное, на что можешь рассчитывать. Все остальные зависимости (от размера буфера, количества поступивших данных и т.п.) будут работать с разной степенью частоты — от "никогда" до "иногда".
В связи с этим, следующий вопрос. Как мне на порту завершения получить уведомление о том, что получены все данные?
В случае с WSASend, можно, конечно, передать в конце структуры WSAOVERLAPPED размер передаваемых данных, а в обработчике складывать отправленные байты отдельно для каждого сокета, но мне кажется этот вариант не очень удачным. Опять же, как поступать в этом случае с WSARecv, где мы не знаем конечный размер данных?
Может, забить на колбэк порта и стартовать обработчик по эвэнту?