У меня есть 2 системы на основе Linux - клиент с 2 интерфейсами (1 LAN, 1 модем) и сервер.
Я открываю 2 сокета UDP и использую setsockopt с SO_BINDTODEVICE, чтобы привязать каждый сокет к его интерфейсу.
Затем я отправляю сообщение от клиента на сервер через каждый из этих сокетов.
Они оба достигают сервера. Серверный сокет читает их и отправляет ответ каждому из них.
Затем я пытаюсь прочитать ответ сервера на клиенте.
НО, есть только 1 ответ.
Также, если я запускаю tcpdump, я вижу, что оба ответа получены на их соответствующих интерфейсах, на том же порте, который они оставили. Все же только один из них достигает сокета. Другой потерян?
«Потерянный» пакет не является случайным, это «не» по умолчанию. Если моя таблица маршрутизации пуста, модем потерян. Если я добавлю маршрут к ip сервера из интерфейса модема, потерянный пакет будет локальным.
Тем не менее, они всегда достигают сервера, всегда возвращаются назад, всегда в tcpdump, но 1 никогда не достигает сокета. Как это может быть?