WSARecv и ошибка 10014

Тема в разделе "WASM.NETWORKS", создана пользователем XshStasX, 27 мар 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Код (Text):
    1. void CALLBACK CompletionRead(
    2.    DWORD dwError,
    3.    DWORD cbTransferred,
    4.    LPWSAOVERLAPPED lpOverlapped,
    5.    DWORD dwFlags
    6. )
    7. {
    8.   WSAResetEvent(lpOverlapped->hEvent);
    9.     return ;
    10. };
    11.  
    12. // блок начальной инициализации  
    13. ZeroMemory(&OverRecv,sizeof(OverRecv));
    14. OverRecv.hEvent = WSACreateEvent();
    15. Events[0] = WSACreateEvent(); Events[1] = WSACreateEvent(); Events[2] = OverRecv.hEvent;
    16. WSAEventSelect(Socket,Events[0],FD_READ);
    17. WSAEventSelect(Socket,Events[1],FD_CLOSE);
    18. AddEventUser(Events,3);
    19.  
    20.  
    21. //код который выполняется когда сработает FD_READ (Events[0])
    22. WSABUF buf;
    23. DWORD s = 0 ;
    24. buf.len = sizeof(LenData);
    25. buf.buf = (char*)&LenData;
    26. WSARecv(Socket,&buf,1,&s,0,&OverRecv,&CompletionRead);
    WSARecv - возвращает -1, а GetLastError() - 10014 , почему ?(((
    Сокет получен отлично, то есть по ходу я что-то не так в WSARecv передал ?
     
  2. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    А вот сейчас использую просто recv(Socket,buf.buf,buf.len,0);, так все отлично читается...
    То есть ошибка получается у меня в WSARecv() .. кстати ОС хр сп3.
     
  3. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.553
    Адрес:
    Russia
    См описание ошибки:
    Смотрите параметр флагов. lpFlags [in, out] . А у вас я вижу 0.
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    мда..разобрался ...надо было так делать
    Код (Text):
    1.      DWORD s1= 0;
    2.      WSARecv(Socket,&buf,1,&s,&s1,&OverRecv,NULL);
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.553
    Адрес:
    Russia
    Ну а зачем вы колбэк убрали? Или он уже вам не нужен стал вдруг. )
    И названия переменных делайте, на будущее, правильное, самокомментируемое. А то потом будете через пол года думать, за что отвечает переменная и что в нее кладется.