Привет всем. Вот пытаюсь подружиться с перехватом сокетов в ИЕ6. Используется send+WSARecv. с первым все нормально. данные нормально перехватываются, отправляются. но, при передаче в WSARecv возникает ошибка. В функции-обработчике WSARecv_my вызываю первым делом оригинальную функцию WSARecv_orig. в итоге получаю SOCKET_ERROR + WSAEWOULDBLOCK При чем мне нужно сразу всю страницу будет закачать в этом вызове. Так понимаю, что нужна синхронизация. Но, ведь она должна была быть произведена еще перед вызовом моего обработчика, нет? Что можно сделать в данной ситуации? как произвести синхронизацию внутри обработчика, или в чем моет быть ошибка? заранее спасибо за помощь.
Значит WSARecv вызывается для неблокирующего сокета. А синхронизация скорее всего происходит позднее в приложении с помощью ивента. Скорее всего нужно ещё перехватывать WSAWaitForMultipleEvents. Ну а вообще читайте msdn и смотрите какие параметры передаются в WSARecv.
параметры я уже смотрел. интересует больше первопричина такого поведения. а как ее решить - другой вопрос. с перехватом WSAWaitForMultipleEvents совсем жестко получится.
2Clerk: мы друг друга не поняли, может? кто-то сталкивался вообще с такой проблемой? (наверняка многие здесь сталкивались )). нельзя ли синхронизироваться внутри обработчика WSARecv?
saxon Можно конечно, вызывай WSAWaitForMultipleEvents внутри обработчика. Только вся асинхронность пропадёт.
а "правильно" как будет? не использоваться обработчик при вызове WSARecv, а самому вызывать его при событии WSAWaitForMultipleEvents? Но, у меня ведь не будет аргументов для функции.