Какое максимальное количество байтов 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()
отчеты.