Что делать, если в модели IOCP указан параметр lpCompletionRoutine для WSASend?

На странице MSDN для WriteFileEx говорится, что его нельзя использовать в модели IOCP, поскольку у него есть аргумент для указания процедуры завершения. Если дескриптор файла был связан с портом завершения ввода-вывода, то WriteFileEx завершится ошибкой.

Однако WSASend позволяет вызывающей стороне указать процедуру завершения в качестве последнего аргумента, в то время как эту функцию можно использовать в модели IOCP.

Я рассмотрел несколько примеров WinSock с IOCP и обнаружил, что последний аргумент lpCompletionRoutine всегда равен нулю. Это обязательно?


person xmllmx    schedule 24.01.2013    source источник


Ответы (1)


Единственное, что написано в документации:

Процедура завершения следует тем же правилам, что и процедуры завершения файлового ввода-вывода Windows.

Это может означать, что вы не можете смешивать IOCP и lpCompletionRoutine вместе, как с WriteFileEx(). С другой стороны, зачем вам вообще хотеть смешивать их вместе? Либо порт завершения получает результат, либо подпрограмма завершения. Зачем вам нужно использовать оба?

person Remy Lebeau    schedule 25.01.2013
comment
Мне просто интересно, почему MSDN явно не документирует эту проблему как WriteFileEx. - person xmllmx; 25.01.2013