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 に答える