Hej Steg ett är att kolla returvärdena från WSAEventSelect. De ska vara 0 om det har gått rätt till. Hur kan jag kolla returvärderna om programmet inte går vidare från WSAWaitForMultipleEvents vid close? Aha, läste fel... dock returnerar båda 0.WSAWaitForMultipleEvents
Har lite problem med WSAWaitForMultipleEvents.
När jag kör koden:
lphEvents[0] = WSACreateEvent();
WSAEventSelect((clientSocket)->getSocketId(),lphEvents[0], FD_CLOSE);
lphEvents[1] = WSACreateEvent();
WSAEventSelect((clientSocket)->getSocketId(),lphEvents[1], FD_READ);
while(1)
{
DWORD Index;
Index = WSAWaitForMultipleEvents(2, lphEvents, FALSE, WSA_INFINITE, FALSE);
WSAResetEvent(lphEvents[Index - WSA_WAIT_EVENT_0]);
...
verkar det som om programmet bara går vidare på FD_READ och inte FD_CLOSE. Byter jag ordning på dem (lphEvents[0] = read lphEvents[1] = close) så fungerar endast close. Någon som vet vad jag gör för fel?
/FredrikSv: WSAWaitForMultipleEvents
Sv:WSAWaitForMultipleEvents
Sv:WSAWaitForMultipleEvents
Om jag testar att lägga till close som nummer 3:
WSAEVENT lphEvents[3];
lphEvents[0] = WSACreateEvent();
int a = WSAEventSelect((clientSocket)->getSocketId(),lphEvents[0], FD_CLOSE);
lphEvents[1] = WSACreateEvent();
int b = WSAEventSelect((clientSocket)->getSocketId(),lphEvents[1], FD_READ);
lphEvents[2] = WSACreateEvent();
int c = WSAEventSelect((clientSocket)->getSocketId(),lphEvents[2], FD_CLOSE);
while(1)
{
string clientMessageIn = "";
// receive from the client
DWORD Index;
Index = WSAWaitForMultipleEvents(3, lphEvents, FALSE, WSA_INFINITE, FALSE);
WSAResetEvent(lphEvents[Index - WSA_WAIT_EVENT_0]);
cout << Index - WSA_WAIT_EVENT_0 << endl;
...
Så fungerar bara close. Dvs det verkar bara som om WSAWaitForMultipleEvents klara att läsa av den sista lphEvents?