У меня это неясно, я где-то читал, что GetQueuedCompletionStatus
вернет результаты WSARecv
и WSASend
в том порядке, в котором они были созданы, поэтому вот мой вопрос:
Если инициализировать CreateIoCompletionPort
с помощью NumberOfConcurrentThreads = 1
, откройте соединение с одним клиентом. и сервер вызывает сначала WSARecv
, затем WSASend
, но клиент никогда ничего не отправляет. Будет ли на сервере GetQueuedCompletionStatus
никогда не возвращать результат от WSASend
, потому что сначала должен произойти результат от WSARecv
?
понимание портов завершения ввода-вывода
comment
в чем вообще вопрос и при чем тут IOCP? вам нужно вызывать WSASend только после завершения WSARecv? или как/какая логика?
- person RbMm   schedule 30.06.2016
comment
Я где-то читал, что GetQueuedCompletionStatus возвращает результаты WSARecv и WSASend в том порядке, в котором они были созданы - нет. Результаты возвращаются в порядке завершения ввода-вывода.
- person Harry Johnston   schedule 02.07.2016
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он основан на ложном предположении.
- person Harry Johnston   schedule 02.07.2016
Ответы (1)
когда операция ввода-вывода завершена (с успехом или первоначально ожидающим возврата) в файле с привязанным IOCP - пакет поставлен в очередь на IOCP - и GetQueuedCompletionStatus получил этот пакет. поэтому, если вы начинаете 2 операции ввода-вывода - WSARecv и WSASend и WSASend конкурируют первыми - GetQueuedCompletionStatus сначала возвращает статус WSASend, даже если WSARecv не завершен. поэтому GetQueuedCompletionStatus сразу после завершения какой-либо операции ввода-вывода в файле с этим IOCP
person
RbMm
schedule
30.06.2016