Когато извикам 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