не пойму в чем дело, аналогичный код в линуксе работает на ура.
Биндить же не обязательно если я хочу получать все пакеты с любых интерфейсов?
Re: Ошибка 10022 при чтении из сырого сокета.
От:
Аноним
Дата:
02.01.13 14:57
Оценка:
Хоть смотрел то, что такое:
WSAGetLastError 10022
?????????????????????????????????????
Что-то типо инвалид аргумент, мусор подсовываешь значит, либо неправильный алгоритм вызова функций.
Здравствуйте, Аноним, Вы писали:
А>Хоть смотрел то, что такое: А>WSAGetLastError 10022 А>????????????????????????????????????? А>Что-то типо инвалид аргумент, мусор подсовываешь значит, либо неправильный алгоритм вызова функций.
Стандартная ошибка нубов при использовании recv и recvfrom... Они считают, что несмотря на то, что в библиотеке параметр размера приемного буфера указан как указатель, они могут туда запихивать значение, а не ссылку...
Как это может работать в никсах, я не представляю. Или там настолько разнятся библиотеки?
N_C>Стандартная ошибка нубов при использовании recv и recvfrom... Они считают, что несмотря на то, что в библиотеке параметр размера приемного буфера указан как указатель, они могут туда запихивать значение, а не ссылку...
N_C>Как это может работать в никсах, я не представляю. Или там настолько разнятся библиотеки?
Я смотрел что значит ошибка... в никсах как то работает
если сделать
bind (raw_socket, (struct sockaddr *) &addr, sizeof (struct sockaddr_in));
то ошибки нет но и не работает как надо
Здравствуйте, homecat, Вы писали:
H>Я смотрел что значит ошибка... в никсах как то работает H>если сделать H>bind (raw_socket, (struct sockaddr *) &addr, sizeof (struct sockaddr_in)); H>то ошибки нет но и не работает как надо
ё... Новый Год делает свое черное дело... Ляпнул, не подумав, про буфер приема, когда надо было сказать про буфер адреса... Да и то — если он null — ничего страшного происходить не должно. Уж извините, погорячился с критикой...
Здравствуйте, homecat, Вы писали:
H>говорим КУ, одновременно приседаем и разводим руки: H>
H>DWORD flag = RCVALL_ON;
H>int io = ioctlsocket(raw_socket,SIO_RCVALL,&flag);
H>
H>теперь можем спокойно получать все пакеты...
Но этот флаг отвечает за несколько другое, а именно за транзитный трафик, обычно проходящий мимо Вашей сетевой карты. Он не должен влиять на трафик, и так идущий на Вашу сетевую карту...
H>то recvfrom работает не вываливается, но получает только ICMP и UDP может что то еще, а TCP в упор не видит, как будто нет такого.
это могучая рука микрософта крепко держит вас за яйца (см Limitations on Raw Sockets)
Как много веселых ребят, и все делают велосипед...