Какое максимальное количество байтов WSARecv может получить за один раз?

Я использую std::vector для представления буфера в моей структуре данных для каждого ввода-вывода:

struct PerIoData 
{
    WSAOVERLAPPED m_overlapped;
    SOCKET m_socket;
    WSABUF m_wsaBuf;
    std::vector<BYTE> m_vecBuffer;
    DWORD m_dwFlags;
    DWORD m_dwNumberOfBytesSent;
    DWORD m_dwNumberOfBytesToSend;
    eOperationType m_operationType;
};

...
...
if (WSARecv(pPerIoData->m_socket, &(pPerIoData->m_wsaBuf), 1, &dwNumberOfBytesReceived, &(pPerIoData->m_dwFlags), &(pPerIoData->m_overlapped), NULL) == 0)
    continue;

Я хочу указать максимальный размер и выполнить "сжатие до размера" для m_vecBuffer после вызова WSARecv().

Я заглянул на эту страницу, но не смог найти нужную мне информацию.

1 ответ

Решение

WSABUF структура, которую вы передаете WSARecv() указывает указатель на буфер, который WSARecv() считывает байты в и максимальное количество байтов, которые могут быть прочитаны в этот буфер. когда WSARecv() завершает свою работу, сообщает, сколько байтов было фактически прочитано в буфер. Если вы используете vector в качестве буфера, вы должны предварительно выделить вектор для максимального размера, который вы хотите, а затем установить WSABUF::buf указать на внутреннюю память вектора, установить WSABUF::len к выделенному размеру вектора, а затем измените размер вектора до нового значения, которое WSARecv() отчеты.

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