Всем доброго времени суток, помогите разобраться с обработкой событий. Есть сл. код:
| Код | char* __fastcall Socket::Request(char* input) { int count(0), bytes, length, res; char buffer[8*1024]; WSANETWORKEVENTS SockProcessEv;
length = strlen(input);
WSACloseEvent(SockNtEv); SockNtEv = WSACreateEvent();
res = WSAEventSelect(Sock, SockNtEv, (FD_READ | FD_WRITE)); if(res == 0) WSAResetEvent(SockNtEv); while(true) { WSAWaitForMultipleEvents(1, &SockNtEv, false, 200, false);
WSAEnumNetworkEvents(Sock, SockNtEv, &SockProcessEv); if((SockProcessEv.lNetworkEvents & FD_WRITE) && (SockProcessEv.iErrorCode[FD_WRITE_BIT] == 0)) { do { bytes = send(Sock, input + count, length - count, 0); if (bytes == SOCKET_ERROR) { if(WSAGetLastError() != WSAEWOULDBLOCK) { break; } } count += bytes; } while(count < length); } if((SockProcessEv.lNetworkEvents & FD_READ) && (SockProcessEv.iErrorCode[FD_READ_BIT] == 0)) { while(true) { bytes = recv(Sock, (char*)&buffer, sizeof(buffer), 0); if (bytes == SOCKET_ERROR) { if(WSAGetLastError() == WSAEWOULDBLOCK) { return buffer; } } } } } }
|
проблема в том, что при первом вызове всё срабатывает, события устанавливаются, а при дальнейших вызовах | Код | SockProcessEv.lNetworkEvents |
устанавливается в нуль и соответственно цикл становится действительно бесконечным :(
P.S. Модераторы, прошу прощения, что тему перепутал. |