使用IOCP时如何初始化WSAOVERLAPPED?

How to initialize WSAOVERLAPPED when using IOCP?

我不确定在使用 IOCP 时如何初始化 WSAOVERLAPPED。我认为我根本不需要初始化它,我只将 WSAOVERLAPPED.hEvent 设置为 NULL(也不确定这是否有必要)。此代码是否正确:

// Send data
char buffer[1024];

WSABUF wsaBuf;
wsaBuf.buf = buffer;
wsaBuf.len = 1024;

WSAOVERLAPPED wsaOverlapped;
wsaOverlapped.hEvent = NULL;

WSASend(s, &wsaBuf, 1, NULL, 0, &wsaOverlapped, NULL);

此外,使用 WSARecv() 时初始化 OVERLAPPED 是否与初始化 WSAOVERLAPPED 相同?

WSAOVERLAPPED结构受制于the same rules as the OVERLAPPED structure,即

Any unused members of this structure should always be initialized to zero before the structure is used in a function call. Otherwise, the function may fail and return ERROR_INVALID_PARAMETER.

   memset(&wsaOverlapped, 0, sizeof(wsaOverlapped));

或者明确地将所有值设置为零。