【发布时间】:2015-08-24 12:23:47
【问题描述】:
我在 x64 平台使用 IOCP 时遇到问题。
当我在 win32 平台上编译我的代码时,它运行良好。但是当我将其更改为 x64 平台时,功能
GetQueuedCompletionStatus(CompletionPort, &BytesTransferred,(PULONG_PTR)&PerHandleData, (LPOVERLAPPED*)&IpOverlapped, INFINITE)
返回 true 而不将值传递给 PerHandleData。
PerHandleData 定义为:
typedef struct
{
SOCKET socket;
SOCKADDR_STORAGE ClientAddr;
}PER_HANDLE_DATA,*LPPER_HANDLE_DATA;
LPPER_HANDLE_DATA PerHandleData;
这意味着,即使函数 GetQueuedCompletionStatus() 似乎没有错误,struct PerHandleData 也无法读取内存:socket 无法读取内存,ClientAddr 也是如此。没有价值观。
所以当它运行到函数WSARecv(PerHandleData->socket, &(PerIoData->databuff), 1, &RecvBytes, &Flags, &(PerIoData->overlapped), NULL);应用程序将因内存错误而停止。
谁能告诉我怎么处理?
【问题讨论】:
-
我们需要查看更多代码。