Я столкнулся с проблемой при использовании IOCP в платформе x64.IOCP не может работать на платформе x64
Когда я компилирую свой код на платформе win32, он работает хорошо. Но когда я изменить его на платформе x64, функция
GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,(PULONG_PTR)&PerHandleData, (LPOVERLAPPED*)&IpOverlapped, INFINITE)
returnes правда, не передать значения PerHandleData.
PerHandleData определяется как:
typedef struct
{
SOCKET socket;
SOCKADDR_STORAGE ClientAddr;
}PER_HANDLE_DATA,*LPPER_HANDLE_DATA;
LPPER_HANDLE_DATA PerHandleData;
Это означает, что, даже если кажется, нет ошибки с функцией GetQueuedCompletionStatus(), структура PerHandleData не может считывать память: сокет не может читать память и так же ClientAddr. Нет значений.
Поэтому, когда он работает до функции WSARecv(PerHandleData->socket, &(PerIoData->databuff), 1, &RecvBytes, &Flags, &(PerIoData->overlapped), NULL)
; приложение остановится для ошибок памяти.
Кто может сказать мне, как с этим бороться?
Нам нужно увидеть больше кода. –