Re: Порты завершения и все что с ними связано
От: ononim  
Дата: 17.05.21 08:01
Оценка:
O>1)И вот вопрос: Получается, что приходится для одной и той же операции создавать две структуру и два раза ее передавать, но, если WSASend используется совместно с портами завершения, то информацию пользователь же получает из очереди порта завершения посредством функции GetQueuedCompletionStatus куда и передает дублированную структуру WSAOVERLAPPED. Зачем же тогда две структуры передавать ?
GetQueuedCompletionStatus _возвращает_ вам указатель на структуру LPOVERLAPPED, ранее переданную в WSASend. (ведь ее аргумент lpOverlapped — это двойной указатель).
На всякий случай отвечу на вопрос типа 'а зачем он мне его возвращает я ведь его сам знаю?' — затем что если вы запустили 100500 параллельных WSASend, по этому указателю вы сможете понять к какому именно из них относится этот результат.


O>В случае с WSASend-GetQueuedCompletionStatus в WSAOVERLAPPED идет запись в параметр WSAOVERLAPPED.InternalHigh — то кол-во байт, которое якобы отправлено на данный момент.

O>2)И позвольте второй вопрос: у функции GetQueuedCompletionStatus — второй параметр это:
O>

O>Указатель на переменную, которая получает количество байтов, переданных в завершенной операции ввода-вывода.

Потому что внутреннее назначение полей WSAOVERLAPPED — недокументированные вещи напрямую их ковырять не стоит. GetQueuedCompletionStatus просто выковыривает вам оттуда нужный вам параметр документированным способом.
Как много веселых ребят, и все делают велосипед...
Отредактировано 17.05.2021 8:02 ononim . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.