LINUX.ORG.RU

Как система определяет, какой сетевой интерфейс будет использовать?

 , ,


0

1

Сразу оговорюсь, у меня embedded, со своим урезанным линуксом. Допустим в системе есть интерфейсы eth0 и wlan0, они то становятся доступными, то нет. Если в основной программе мы открываем сокет (AF_INET), то на каком из интерфейсов он будет назначен?

Понятно, что можно явно указать IP, но что будет в случае, если мы не указываем IP?

    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE
    int res = getaddrinfo (NULL, port_num, &hints, &servinfo);

И второй вопрос: как определить программно, что: 1) какой либо из интерфейсов стал доступен 2) там доступен интернет (можно конечно пингануть, но может есть менее костыльный способ?)

Спасибо.

Сокет никуда не назначен. Если ты делаешь потом bind, то прибивается он в зависимости от адреса. Если этого UDP какой-нить и ты шлешь через него пацкет, то маршрутами разруливается

anonymous
()

1) какой либо из интерфейсов стал доступен

Вариантов много на самом деле. Вплоть до ноификаций от системы. netlink вроде умеет.

2) там доступен интернет

Что это значит? Доступ к товему хосту? ну тут только соединяться пробовать.

anonymous
()

Таблица маршрутизации и метрика. RTFM.

invy ★★★★★
()

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

ip r l

ttnl ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.