0

我正在尝试根据此示例使用重叠 io 来开发 req/res 服务器。
问题是同时可能有多个发送到同一个套接字,我无法将重叠结构传递WSAGetOverlappedResult给正确管理发送事件。主循环如下所示:

while (TRUE) {
    index = WSAWaitForMultipleEvents(EventTotal, EventArray, FALSE, WSA_INFINITE, TRUE);

    if (index == WSA_WAIT_FAILED) {
        printf("Wait failed w/err %d\n", WSAGetLastError());
        continue;
    }

    index -= WSA_WAIT_EVENT_0;
    if (!WSAEnumNetworkEvents(SocketArray[index]->Socket, EventArray[index], &NetworkEvents)) { // Multiple events max exist
        if (NetworkEvents.lNetworkEvents & FD_ACCEPT)
            ManageAccept(index, NetworkEvents);

        if (NetworkEvents.lNetworkEvents & FD_READ)
            ManageRead(index, NetworkEvents);

        if (NetworkEvents.lNetworkEvents & FD_WRITE)
            ManageWrite(index, NetworkEvents);
    }
}

然后我将消息从方法发送ManageRead到客户端套接字

WSASend(SocketArray[index]->Socket, &(over->wsabuf), 1, &SendBytes, 0, over, NULL)

当重叠发送完成时,我无法在方法中真正意识到ManageSend哪些重叠结构是通过调用实际发送的WSAGetOverlappedResult

WSAGetOverlappedResult(SocketArray[index]->Socket, over, &SendBytes, FALSE, &flags)

我必须使用WorkerRoutine临时来控制发送,但也许有人知道如何解决这个问题。或者可能有一些不同的方法可以返回已完成的重叠结构?

4

0 回答 0