У меня странная проблема, когда поведение соединения на сокете UDP зависит от интерфейса, с которого получен трафик c.
Я генерирую сокет UDP, который привязывается к указанному порту c на все интерфейсы и ждет входящих пакетов. Если connect не был вызван на локальном сокете, я (1) подключаюсь к удаленному адресу (2) отслеживает сокет и (3) генерирует новый неподключенный сокет на том же локальном порту. Если в сокете вызывается connect, я просто вызываю recv и обрабатываю данные.
Когда traffi c переходит через интерфейс ethe rnet, traffi c правильно маршрутизируется в подключенный сокет. Однако в интерфейсе Wi-Fi traffi c всегда маршрутизирует во вновь созданный неподключенный сокет.
Я убедился, что это нормально работает на моей машине с Ubuntu, и это похоже на причуду другой аппаратной платформы. Я работаю над.
Что я могу сделать, чтобы решить проблему? Тот факт, что системный вызов connect никогда не завершается ошибкой, но по-разному работает для двух интерфейсов, говорит о том, что это не проблема ядра. Есть ли что-то в таблицах IP, которые могут повлиять на маршрутизацию traffi c или в драйвере wifi? Что-то еще?