Перехват Асинхронных сокетов. проблема с WSAEWOULDBLOCK

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

  1. saxon

    saxon New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2009
    Сообщения:
    23
    Привет всем.
    Вот пытаюсь подружиться с перехватом сокетов в ИЕ6.
    Используется send+WSARecv.
    с первым все нормально. данные нормально перехватываются, отправляются.
    но, при передаче в WSARecv возникает ошибка.
    В функции-обработчике WSARecv_my вызываю первым делом оригинальную функцию WSARecv_orig.
    в итоге получаю SOCKET_ERROR + WSAEWOULDBLOCK
    При чем мне нужно сразу всю страницу будет закачать в этом вызове.
    Так понимаю, что нужна синхронизация. Но, ведь она должна была быть произведена еще перед вызовом моего обработчика, нет?
    Что можно сделать в данной ситуации? как произвести синхронизацию внутри обработчика, или в чем моет быть ошибка?

    заранее спасибо за помощь.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Значит WSARecv вызывается для неблокирующего сокета. А синхронизация скорее всего происходит позднее в приложении с помощью ивента. Скорее всего нужно ещё перехватывать WSAWaitForMultipleEvents. Ну а вообще читайте msdn и смотрите какие параметры передаются в WSARecv.
     
  3. saxon

    saxon New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2009
    Сообщения:
    23
    параметры я уже смотрел. интересует больше первопричина такого поведения. а как ее решить - другой вопрос.
    с перехватом WSAWaitForMultipleEvents совсем жестко получится.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    saxon
    1. http://wasm.ru/forum/viewtopic.php?id=34151
    2. RtlActivateActivationContextUnsafeFast()
     
  5. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Clerk
    Ты ещё на висту не перебрался?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Booster
    Нет. Собственно в чём смысл вопроса твоего ?
     
  7. saxon

    saxon New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2009
    Сообщения:
    23
    2Clerk: мы друг друга не поняли, может?

    кто-то сталкивался вообще с такой проблемой? (наверняка многие здесь сталкивались )).
    нельзя ли синхронизироваться внутри обработчика WSARecv?
     
  8. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    saxon
    Можно конечно, вызывай WSAWaitForMultipleEvents внутри обработчика. Только вся асинхронность пропадёт.
     
  9. saxon

    saxon New Member

    Публикаций:
    0
    Регистрация:
    24 июн 2009
    Сообщения:
    23
    а "правильно" как будет?
    не использоваться обработчик при вызове WSARecv, а самому вызывать его при событии WSAWaitForMultipleEvents? Но, у меня ведь не будет аргументов для функции.
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    saxon
    А сохранить необходимые данные при вызове WSARecv проблема?