Есть ли способ, чтобы приложение в Linux имело доступ к 2 сетевым картам? - PullRequest
3 голосов
/ 26 мая 2010

Моему приложению необходим доступ к двум сетевым картам. Один для приема данных (eth0) и другой для отправки данных (3G модем).

Обычно ядро ​​заставляет приложение работать только с одной картой за раз.

Есть ли что-нибудь, что я могу сделать, чтобы заставить его работать?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 26 мая 2010

В ядре такого нет.

Ядро будет направлять ваш трафик в наиболее подходящий конечный пункт назначения на основе информации о маршрутизации и сетей, которым назначена каждая карта. Однако, если вы используете TCP, ваше двунаправленное соединение будет использовать только один маршрут, так как с этим соединением связан только один адрес.

Если вы пытаетесь внедрить систему многоадресной отправки / получения, это не поддерживается в обычном TCP - вам нужно будет использовать другой протокол, вероятно реализованный в ядре.

2 голосов
/ 27 мая 2010

Ядро не заставляет вас использовать один интерфейс. Он просто выбирает интерфейс по умолчанию, если не указано иное. Вы можете указать конкретный интерфейс, указав его IP-адрес в команде bind (). Чтобы получить список доступных интерфейсов и их имена, используйте функцию ioctl (SIOCGIFCONF).

Вот пример: http://techpulp.com/2008/10/get-list-of-interfaces-using-siocgifconf-ioctl/

1 голос
/ 26 мая 2010

Вы можете связать два разных UDP-сокета с отдельными сетевыми картами с помощью bind(2), отправить их на одну и прослушать другую.

...