Это на Java, но я всегда могу вернуться к C через JNI, если это необходимо.
У меня есть система с двумя сетевыми картами, каждая из которых подключена к отдельной подсети. Я хочу использовать многоадресную передачу (в частности, SDP) для обнаружения других хостов в обеих сетях.
Одна сеть проста: создайте MulticastSocket на указанном порту, присоединитесь к нему, и я получу пакеты. Простота.
Две сети: пока невозможно. Я пробовал:
1) создание двух сокетов, привязка к одному и тому же порту и использование setInterface () или setNetworkInterface () для «подключения» к нужному интерфейсу. Не повезло, даже после различных перестановок setReuseAddress ().
2) создайте один сокет, а затем попытайтесь соединиться дважды с двумя вызовами joinGroup (SocketAddress mcastaddr, NetworkInterface netIf). Второй вызов присоединения не удался.
Решения за пределами Java были бы отличными. В частности, если бы я мог настроить многоадресные маршруты, которые бы эффективно «объединяли» два интерфейса (я мог бы тогда посмотреть на каждый пакет, чтобы определить, какая сеть), что было бы хорошо. Как я упоминал ранее, любое количество нативного кода можно использовать в этой среде (Linux, с Java-инфраструктурой Apache "luni").
Спасибо!