Я не уверен, как инициализировать WSAOVERLAPPED
при использовании IOCP. Я не думаю, что мне вообще нужно его инициализировать, я только установил 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);
Кроме того, инициализация OVERLAPPED
при использовании WSARecv()
аналогична инициализации WSAOVERLAPPED
?
OVERLAPPED
должны быть действительными до тех пор, пока перекрывающаяся отправка не завершится и завершение не будет извлечено из IOCP. ТОЛЬКО WSABUF может быть основан на стеке и существовать только во время вызоваWSASend()
API. - person Len Holgate   schedule 06.03.2015buffer
иwsaOverlapped
должны быть созданы в куче? - person   schedule 06.03.2015