- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 UDP 服务器上工作,并尝试使用重叠 IO。我一直在尝试使用 MSDN 示例和文档进行研究,但尚未找到该函数的 lpCompletionRoutine 参数的使用。
我注意到您将 PWSAOVERLAPPED
传递给 WSARecvFrom
,并且它包含一个 LPVOID Pointer
成员。我是否可以创建自己的用户数据结构,其中包含对缓冲区的引用,并将其作为指针传递到 PWSAOVERLAPPED
的此 Pointer
成员中?
我认为这有点多余,尽管接收到的字节在两个地方可用:
WSARecvFrom
的 lpNumberOfBytesRecvd
参数和 lpCompletionRoutine
的 cbTransferred
参数。
我当前完成例程的示例:
void CALLBACK CompletionROUTINE(
DWORD dwError,
DWORD cbTransferred,
LPWSAOVERLAPPED lpOverlapped,
DWORD dwFlags
) {
UNREFERENCED_PARAMETER(dwError);
UNREFERENCED_PARAMETER(lpOverlapped);
UNREFERENCED_PARAMETER(dwFlags);
/* Best way to get the bytes read here? */
Printf(L"Recieved %d bytes\n", cbTransferred);
}
以及我对 WSARecvFrom
的调用:
iResult = WSARecvFrom(
listenSocket,
&wsaBuffer,
1,
&dwBytesRecieved,
&dwFlags,
(PSOCKADDR)&sender,
&senderAddrSize,
&wsaOverlapped,
CompletionROUTINE
);
最佳答案
来自WSAOVERLAPPED
结构documentation :
hEvent Type: HANDLE If an overlapped I/O operation is issued without an I/O completion routine (the operation's lpCompletionRoutine parameter is set to null), then this parameter should either contain a valid handle to a WSAEVENT object or be null. If the lpCompletionRoutine parameter of the call is non-null then applications are free to use this parameter as necessary.
因此,由于我提供了 lpCompletionRoutine
参数,因此我可以使用 WSAEvent
作为指向用户定义数据的指针。
感谢评论者引导我得出这一发现。
关于c - 如何将缓冲区放入 CompletionROUTINE 作为 WSARecvFrom 调用的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50736594/
我是一名优秀的程序员,十分优秀!