0
此代码编译并运行。当客户端连接时,WSAWaitForMultipleEvents返回nReturnCode = 0(相当于WSA_WAIT_EVENT_0)。但是代码总是显示“EVENT:NOT ACCEPT”,当我在调试模式下查看NetworkEvents时,它完全填充了零。WSAWaitForMultipleEvents成功返回,但WSANETWORKEVENTS对象为空
我没想到这段代码能够工作,因为我不知道如何初始化变量NetworkEvents。我不必以某种方式将它“绑定”到套接字上吗?结构应该如何知道它应该存储ListenSocket的网络事件?
WSAEVENT event = WSACreateEvent();
WSAEventSelect(ListenSocket, event, FD_CONNECT | FD_ACCEPT | FD_READ | FD_WRITE | FD_CLOSE);
//DWORD cEvents = MAKELONG(MAKEWORD(0, 0), MAKEWORD(0, 1));
WSAEVENT lphEvents[1] = {event};
//lphEvents[0] = event;
//DWORD dwTimeout = MAKELONG(MAKEWORD(0, 0), MAKEWORD(0, 0));
WSANETWORKEVENTS NetworkEvents = {0};
int nReturnCode = WSAWaitForMultipleEvents(1, &lphEvents[0], false, WSA_INFINITE, false);
if ((NetworkEvents.lNetworkEvents & FD_ACCEPT) == FD_ACCEPT) {
std::cout << "EVENT: ACCEPT !" << std::endl;
} else {
std::cout << "EVENT: NOT ACCEPT !" << std::endl;
}
这就是答案可能缺少
WSAEnumNetworkEvents
通话。谢谢 ! – EarnieWSANETWORKEVENTS :: lNetworkEvents可以包含多个事件吗? – Quest