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.
Что делать?
Программирование