Поскольку я не являюсь носителем английского языка, мне может что-то не хватать, так что, возможно, кто-то здесь знает лучше меня.
Взято из документации WSASend в MSDN :
lpBuffers [в]
Указатель на массив структур WSABUF. Каждая структура WSABUF содержит указатель на буфер и длину буфера в байтах. Для приложения Winsock после вызова функции WSASend система владеет этими буферами, и приложение может не получить к ним доступ. Этот массив должен оставаться действительным в течение всей операции отправки.
Хорошо, вы видите жирный текст? Непонятное место!
Я могу придумать два перевода для этой строки (может быть что-то еще, вы называете это):
Перевод 1 - «буферы» относятся к структуре OVERLAPPED, которую я передаю этой функции при ее вызове. Я могу повторно использовать объект снова только после получения уведомления о его завершении.
Перевод 2 - «буферы» относятся к фактическим буферам, с данными, которые я отправляю. Если объект WSABUF указывает на один буфер, то я не могу коснуться этого буфера, пока операция не будет завершена.
Может ли кто-нибудь сказать, как правильно интерпретировать эту строку?
И ... Если ответ второй - как бы вы его разрешили?
Потому что для меня это означает, что для каждого отправляемого мной данных / буфера я должен сохранять их копию у отправителя сторона - таким образом, имея МНОГО «ожидающих» буферов (разных размеров) в приложении с высоким трафиком, что действительно повредит «масштабируемости».
Утверждение 1:
В дополнение к предыдущему абзацу («И ....») я думал, что IOCP копирует данные, которые должны быть отправлены, в свой собственный буфер и отправляет оттуда, если вы не установите SO_SNDBUF до нуля.
Утверждение 2:
Я использую буферы, выделенные стеком (вы знаете, что-то вроде char cBuff[1024];
в теле функции - если перевод основного вопроса является вторым вариантом (т.е. буферы должны оставаться такими, как они есть до завершения отправки), тогда ... это действительно сильно портит ситуацию! Можете ли вы придумать способ решить эту проблему? (Я знаю, я спросил об этом другими словами выше).