WSAEventSelect ?解决办法

WSAEventSelect ?
为什么我写的这段代码只能接受两次客户端的连接啊。在往后就接收不到连接。WSAWaitForMultipleEvents()就永远返回TIMEOUT了。
C/C++ code
WSAEVENT acceptEvent = WSACreateEvent(); //事件对象句柄
        SOCKET* server = serSocket->getSocket();//事件对象注册在的socket
        if(server == NULL)
        {
cout<<"监听线程启动有错误"<<endl;
             return -1;
        }

        WSAEventSelect(*server,acceptEvent,FD_ACCEPT|FD_CLOSE);//事件对象关心的事件类型
//cout<<"the connectionOpenThread is running"<<endl;
        logger->log("ConnectionOpenThread is running.");
        WSAEVENT events[1] = {acceptEvent};
        while(m_runningthread)
        {
            DWORD ret;  
            ret = ::WSAWaitForMultipleEvents(1, &events[0], FALSE, 100, FALSE); 
            if(ret == WSA_WAIT_FAILED || ret == WSA_WAIT_TIMEOUT)  
            {  
                continue;  
            }  
cout<<"a network event"<<endl; //测试
            WSANETWORKEVENTS ne;//网络事件
            WSAEnumNetworkEvents(*server,acceptEvent,&ne);  //查询什么网络事件发生了,WSAEnumNetworkEvents函数会自动重置受信事
            if (ne.lNetworkEvents&FD_ACCEPT) 
            {   
                //为这个客户端建立一个套接字用来收发数据。 
                logger->log("a client connect.");
                cout<<"a client connect"<<endl;
                SOCKADDR_IN clientAddr;   
                int addrlen = sizeof(sockaddr);   
                SOCKET sClient = ::accept(*server, (sockaddr*)&clientAddr, &addrlen);   
                //send(sClient,"server",7,0);//SOCKET可以使用
                TCPSocket tempTcpsocket;
                tempTcpsocket.setSocket(sClient);
                                     SocketIO socketio;
                socketio.setTCPSocket(&tempTcpsocket);

                //*********************************************************
                //TCPSocket* test = socketio.getTCPSocket();
                //SOCKET* t = test->getSocket();
                //send(*t,"server",7,0);//SOCKET 可以使用
                //************************************************************
                IOService ios ;
                ios.setSocketIO(&socketio);
                //*****************************************************
                //SOCKET* soc = ios.getSocket();
                //send(*soc,"server",7,0);///ok
                //****************************************************


                SocketThread::addSocketService(&ios);
                WSAResetEvent(acceptEvent);
            }
}
cout<<"connectionOPenThread was closed"<<endl;
        ReleaseMutex(hmutex);
        this->Stop();
        return -1;
    }


------解决方案--------------------
WSAEnumNetworkEvents本身会重置这个事件对象的状态,你后面不需要调用WSAResetEvent
------解决方案--------------------
猜测,这不是WSAEventSelect的问题,可以尝试把焦点转向别的地方。
如果楼主调用GetQueuedCompletionStatus或者循环的异步接收却总是超时然后被WSAWaitForMultipleEvents逮到,结果就无限timeout了,典型的对一个关闭的套接字循环调用WSARecv就会出现这种情况。
纯猜测。。。