//接受远程连接的线程
UINT WINAPI AcceptThread(PVOID pParam)
{
CONNECTTHREAD connectthread;
HANDLE hNewThread;
DWORD  dwNewThreadID;
SOCKET s; 
WSAEVENT hEvnets[2];
SOCKADDR ClientAddr;
SOCKADDR_IN ClientAddrIn;
int iAddrLen = sizeof(ClientAddr);
CONNECTSOCKET ConnectSocketInfo; if(!PeerCreateSocket(&s,PEER_STREAM))
{
return -1;
}
if(!PeerBindSocket(s,szHostAddr,nHostPort))
{
PeerCloseSocket(s);
return -1;
}
if(!PeerListenSocket(s))
{
PeerCloseSocket(s);
return -1;
} WSAEVENT hNetEvent = WSACreateEvent();
if(hNetEvent == WSA_INVALID_EVENT)
{
PeerCloseSocket(s);
return -1;
}

hEvnets[0] = hExitEvent;
hEvnets[1] = hNetEvent; int result = WSAEventSelect(s,hNetEvent,FD_ACCEPT);
if(result == SOCKET_ERROR)
{
PeerCloseSocket(s);
WSACloseEvent(hNetEvent);
return -1;
}
//准备工作已经完毕
SetEvent(hPrepareEvent);
//等候网络时间完成的环境变量
WSANETWORKEVENTS NetworkEvents;
for(;;)
{
DWORD EventCaused = WSAWaitForMultipleEvents(
2,
hEvnets,  
FALSE,                  
WSA_INFINITE, 
FALSE); if(EventCaused == WSA_WAIT_FAILED || EventCaused == WAIT_OBJECT_0)
{
WSACloseEvent(hNetEvent);
PeerCloseSocket(s);
return -1;
} result = WSAEnumNetworkEvents(
s,                           
hNetEvent,              
&NetworkEvents);

if(result == SOCKET_ERROR)  
{
WSACloseEvent(hNetEvent);
PeerCloseSocket(s);
return -1;
} if(NetworkEvents.lNetworkEvents == FD_ACCEPT)
{
SOCKET ClientSocket = WSAAccept(s, &ClientAddr, &iAddrLen, NULL, NULL);
if(INVALID_SOCKET == ClientSocket)
{
continue; 
}
else
{
memcpy(&ClientAddrIn,&ClientAddr,sizeof(SOCKADDR_IN));
strcpy(ConnectSocketInfo.IP,inet_ntoa(ClientAddrIn.sin_addr));
ConnectSocketInfo.socket=ClientSocket;
if((hNewThread=BeginPeerThread(ServerThread,&ConnectSocketInfo,&dwNewThreadID))==NULL)
continue;
else{
connectthread.hThread=hNewThread;
connectthread.threadID=dwNewThreadID;
EnterCriticalSection(&csProtectList);
listConnectThread.push_back(connectthread);
LeaveCriticalSection(&csProtectList);
} }
}
}
WSACloseEvent(hNetEvent);
PeerCloseSocket(s);
return 0;
}进入循环后,第二次WSAWaitForMultipleEvents函数报错,不知道为什么?