Понимание портов завершения ввода / вывода

У меня нет этого ясно, я где-то читал, что GetQueuedCompletionStatus вернусь WSARecv а также WSASend результаты в том порядке, в котором они были созданы, поэтому вот мой вопрос:
На сервере Если инициализирован CreateIoCompletionPort с NumberOfConcurrentThreads = 1 затем открыть соединение с одним клиентом, и сервер сначала вызывает WSARecv затем WSASend, но клиент никогда ничего не отправляет. На сервере будет GetQueuedCompletionStatus никогда не возвращать результат от WSASend потому что результат от WSARecv должно произойти первым?

1 ответ

Когда операция ввода-вывода завершена (с успехом или первоначально ожидающим возврата) для файла с привязанным IOCP - пакет помещается в очередь на IOCP - и GetQueuedCompletionStatus получил этот пакет. поэтому, если вы начинаете 2 операции io - WSARecv, WSASend и WSASend соревнуются первыми - GetQueuedCompletionStatus сначала возвращаются со статусом WSASend, даже если WSARecv не завершен. поэтому GetQueuedCompletionStatus сразу после завершения какой-либо операции ввода-вывода для файла с этим IOCP

Другие вопросы по тегам