WSARecv一次可以接收的最大字节数是多少

What is the maximum number of bytes WSARecv can receive at one time?

本文关键字:字节数 多少 一次 WSARecv      更新时间:2023-10-16

我使用std::vector来表示每个IO数据结构中的缓冲区:

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;

我想指定最大大小,并在调用WSARecv()后对m_vecBuffer执行"收缩以适应"。

我看了一下这个页面,但找不到我要找的信息。

传递给WSARecv()WSABUF结构指定指向WSARecv()将字节读取到的缓冲区的指针,以及可以读取到该缓冲区的最大字节数。当WSARecv()完成其工作时,它会报告实际读取到缓冲区中的字节数。如果使用vector作为缓冲区,则必须将向量预先分配到所需的最大大小,然后将WSABUF::buf设置为指向向量的内部内存,将WSABUF::len设置为向量的分配大小,然后调整向量大小为WSARecv()报告的新值。