LINUX.ORG.RU

udp получить адрес назначения пакета


0

1

Есть сетевой интерфейс со множеством адресов, программа слушает 0.0.0.0, необходимо определять адрес назначения входящего udp пакета
Делал согласно http://stackoverflow.com/questions/3062205/setting-the-source-ip-for-a-udp-so..., но ipi_addr содержит 0.0.0.0
Что я мог упустить ?

★★★★★
Ответ на: комментарий от x905

странно..интерфейс оно вроде как угадывает

На уровне экперимента: попробовать поставить setsockopt(sock, IPPROTO_IP, IP_PKTINFO, &sockopt, sizeof(sockopt)) после bind.

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

нет, не помогло

в качестве альтернативы я реализовал bind на каждый интерфейс, но где то в районе 1000 происходит ошибка EMFILE
попытался увеличить /proc/sys/fs/file-max, но не помогло (по умолчанию было 98187, но и это с запасом), наверно не тот параметр

программа служит для тестов эмуляции внешних устройств для другой программы, поэтому и решение со множеством bind подойдет, но хотел «более красиво» сделать

x905 ★★★★★
() автор топика
Ответ на: комментарий от no-dashi

тред читать непринято ? ТС адрес получателя надо узнать. То есть по какому интерфейсу (точнее на который IP-шник) прилетело UDP при условии bind INADDR_ANY. А это только через recvmsg, но что-то несрастается..

MKuznetsov ★★★★★
()
Ответ на: комментарий от x905

Пример небрежный, его нельзя так просто (без исправлений) скомпилировать.

Допустим, переопределение cmsg:

union control_data  cmsg; 
...
for(cmsghdr *cmsg = CMSG_FIRSTHDR(&msg)

Поэтому не понятно, что такое cmsg и вобще, может под «msg.msg_control = &cmsg» нужно побольше места?

У меня работает IP_PKTINFO, поэтому если от вас будет рабочий пример, который скомпилируется gcc-4.4.4, то я его попробую запустить у себя. Тогда можно будет сказать, дело в коде или в вашей системе, где ядро/glibc не передают нужную информацию.

mky ★★★★★
()
Ответ на: комментарий от mky

проблема была в моем коде (данная область для меня новая, потому и упустил некоторый момент), т.к. просто скопипастил корявый пример из ссылки и не понял где ошибся

x905 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.