Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > 3 сетевых интерфейса


Автор: konshyn 17.10.2013, 16:05
Доброго вечера всем.

Такое дело.. У меня на компьютере установлено три сетевые карточки. 
Вопрос: когда я создаю сокет, как мне выбирать, через какой сетевой интерфейс отправлять данные?

Автор: o2n3e 17.10.2013, 17:12
Модератор: Сообщение скрыто.

Автор: Alexeis 17.10.2013, 17:16
  Каждый сетевой адаптер имеет свой адрес. Насколько я помню, локальный трафик будет отправляться согласно IP адресу назначения. Сервер, очевидно, забиндится сразу на нужный адрес адаптера. Внешний трафик клиента пойдет согласно таблице маршутизации. Без специальных настроек таблицы маршрутизации винда направляет внешний трафик на адаптер, который установил интернет соединение последним.  

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/3-сетевых-интерфейса-id525fe0baae20150705000000#findElement_E7045_525ff148ae2015307e0005a4_0

Автор: feodorv 17.10.2013, 18:32
Цитата(konshyn @  17.10.2013,  17:05 Найти цитируемый пост)
Вопрос: когда я создаю сокет, как мне выбирать, через какой сетевой интерфейс отправлять данные? 

Не ясен смысл вопроса. ОС сама смаршрутизирует как надо, если правильно настроена.
Другое дело, если насильственно требуется установить соединение через выделенный интерфейс (и ни какой другой). Тогда http://codingrelic.geekhold.com/2009/10/code-snippet-sobindtodevice.html.

Автор: konshyn 18.10.2013, 10:33
Цитата(Alexeis @  17.10.2013,  17:16 Найти цитируемый пост)
Без специальных настроек таблицы маршрутизации винда направляет внешний трафик на адаптер, который установил интернет соединение последним.  

Это понятно. Но нужна умышленная привязка, независимо от таблицы маршрутизации.

Цитата(feodorv @  17.10.2013,  18:32 Найти цитируемый пост)
Не ясен смысл вопроса.

Вы правильно поняли вопрос. Смысл именно в насильственной привязанности сокета к устройству.  Это то, что нужно. Спасибо



Автор: konshyn 18.10.2013, 10:55
У меня еще один вопрос. Я нашел, как еще с помощью функциюю ioctl привязывать к сетевой карте.
так что лучше: setsockopt или ioctl??

UPD: Функция bind() нужна для привязки только прослушиваего сокета, я так понимаю?

Автор: feodorv 18.10.2013, 12:52
Цитата(konshyn @  18.10.2013,  11:55 Найти цитируемый пост)
Я нашел, как еще с помощью функциюю ioctl привязывать к сетевой карте.

Как?

Автор: konshyn 18.10.2013, 13:11
Цитата(feodorv @  18.10.2013,  12:52 Найти цитируемый пост)
Как? 

Извиняюсь. Это совсем не то. Вопросов больше нет.
Спасибо

Автор: feodorv 18.10.2013, 13:50
Цитата(konshyn @  18.10.2013,  11:55 Найти цитируемый пост)
Функция bind() нужна для привязки только прослушиваего сокета, я так понимаю?

Нет. Вообще говоря, для любого. bind() может устанавливать source IP address, может port, может и то, и другое.

Автор: o2n3e 18.10.2013, 16:04
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)