2

我正在使用 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 上执行“缩小以适应”。

我已经查看了此页面,但无法找到我正在寻找的信息。

4

1 回答 1

3

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

于 2012-07-25T20:02:41.927 回答