铸造的问题这是我PER_IO_CONTEXT结构(我将它们存储在单链表):与链表项
typedef struct _PER_IO_CONTEXT
{
SLIST_ENTRY ItemEntry;
WSAOVERLAPPED Overlapped;
WSABUF wsabuf;
/* some other data*/
} PER_IO_CONTEXT, *PPER_IO_CONTEXT;
及以下WSAsend,使用该名单获得WSAOVERLAPPED结构:
...
PSLIST_HEADER pListHead;
...
PSLIST_ENTRY pListEntry = InterlockedPopEntrySList(pListHead);
PPER_IO_CONTEXT ovl = (PPER_IO_CONTEXT)pListEntry;
WSASend(pTmp1->Socket,..., &(ovl->Overlapped), NULL);
当GQCS得到最后通知:
LPWSAOVERLAPPED lpOverlapped = NULL;
PPER_IO_CONTEXT lpIOContext = NULL;
....
GetQueuedCompletionStatus(..... (LPOVERLAPPED *)&lpOverlapped, INFINITE);
lpIOContext = (PPER_IO_CONTEXT)lpOverlapped;
lpIOContext->wsabuf // this fail
正如你可以看到下列投lpIOContext =(PPER_IO_CONTEXT)lpOverlapped不起作用,因为WSAsend提供了wsaoverlapped - PER_IO_CONTEXT结构的第二个成员,所以在这种情况下不能使用像lpIOContext->这样的引用。
有办法处理这种情况吗?
完成这个任务没有你的帮助,我会应付不来, 谢谢。 – maciekm