Когда я вызываю WSASend()
или WSARecv()
или AcceptEx()
, пакет завершения будет помещен в порт завершения, и я могу удалить его из очереди, используя GetQueuedCompletionStatus()
. Но как я могу узнать, какую операцию представляет этот пакет завершения?
Как узнать, предназначен ли пакет завершения для WSASend(), WSARecv() или AcceptEx()?
Ответы (1)
Вы используете «расширенную» структуру OVERLAPPED
, которая содержит другую информацию. Часто он также содержит буфер данных и некоторые флаги, которые сообщают вызывающей стороне GetQueuedCompletionStatus()
тип завершения.
В Интернете есть много полезных руководств по IOCP, и я ожидаю, что все они объяснят это, поскольку это довольно фундаментально. Мои руководства можно найти здесь вместе с некоторым кодом, реализующим несколько простых серверов IOCP.
person
Len Holgate
schedule
24.02.2015
LPOVERLAPPED
, который вы получили отGetQueuedCompletionStatus
, с указателем, который вы передалиWSASend
и другим. Вы также можете добавить дополнительных членов в конец структуры, чтобы спрятать дополнительную информацию. - person Igor Tandetnik   schedule 24.02.2015char
в конец структуры, который будет содержать тип операции, например: «S», «R», «A»? (это кажется лучшей альтернативой сравнению указателей!) - person   schedule 24.02.2015