Программизмы...

Apr 15, 2010 16:17

Сломал бошку на работе.
А по сему обращаюсь к ресурсам человеческой вселенной =)

Есть задача. В кратце чтобы на вдаваться в подробности - что-то типа HTTP-сервера но работающего по UDP.
Для того чтобы отдавать ответ на запрос по UDP мне необходимо выудить из IP пакета информацию об адресе отправителя.

1) Для этого создаю RAW-сокет

sock=socket(AF_INET, SOCK_RAW, IPPROTO_UDP);

2) делаю ему bind
3) Слушаю функцией recv/recvfrom
4) разбираю результат:

struct ip *iph;
struct udphdr* udph;
*iph = (struct ip*)addr;
*udph = (struct udphdr*)addr + sizeof(struct ip);

Вроде бы все довольны. Всё получилось.
Ан нет! В линуксе работает во FreeBSD/Darwin/Solaris не работает
Они не принимают UDP пакеты по SOCK_RAW.

Что делать?

Программирование

Previous post Next post
Up