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