Код (Text): void CALLBACK CompletionRead( DWORD dwError, DWORD cbTransferred, LPWSAOVERLAPPED lpOverlapped, DWORD dwFlags ) { WSAResetEvent(lpOverlapped->hEvent); return ; }; // блок начальной инициализации ZeroMemory(&OverRecv,sizeof(OverRecv)); OverRecv.hEvent = WSACreateEvent(); Events[0] = WSACreateEvent(); Events[1] = WSACreateEvent(); Events[2] = OverRecv.hEvent; WSAEventSelect(Socket,Events[0],FD_READ); WSAEventSelect(Socket,Events[1],FD_CLOSE); AddEventUser(Events,3); //код который выполняется когда сработает FD_READ (Events[0]) WSABUF buf; DWORD s = 0 ; buf.len = sizeof(LenData); buf.buf = (char*)&LenData; WSARecv(Socket,&buf,1,&s,0,&OverRecv,&CompletionRead); WSARecv - возвращает -1, а GetLastError() - 10014 , почему ?((( Сокет получен отлично, то есть по ходу я что-то не так в WSARecv передал ?
А вот сейчас использую просто recv(Socket,buf.buf,buf.len,0);, так все отлично читается... То есть ошибка получается у меня в WSARecv() .. кстати ОС хр сп3.
мда..разобрался ...надо было так делать Код (Text): DWORD s1= 0; WSARecv(Socket,&buf,1,&s,&s1,&OverRecv,NULL);
Ну а зачем вы колбэк убрали? Или он уже вам не нужен стал вдруг. ) И названия переменных делайте, на будущее, правильное, самокомментируемое. А то потом будете через пол года думать, за что отвечает переменная и что в нее кладется.