Здравствуйте, Pavel515, Вы писали:
P>Есть компьютер centos 7 P>несколько сетевых адаптеров P> inet 172.18.2.66 netmask 255.255.255.0 broadcast 172.18.2.255 P> inet 192.168.71.240 netmask 255.255.255.224 broadcast 192.168.71.255 P> inet 10.1.24.30 netmask 255.255.255.0 broadcast 10.1.24.255
P>Есть ли возможность при вызове
P>socket(...) P>connect(...)
P>управлять адресом источника? или ядро само определит этот адрес в зависимости от таблицы маршрутизации и лезть туда не надо?
Обычно само и обычно не надо.
Если надо — есть функция bind(), которую надо звать до connect(). Если connect() вызван, звать bind() уже поздно — он вызовется внутри connect().
Есть, правда, специализированные случаи, когда надо переопределять адрес в зависимости от ремоты — вот тут уже надо хитрую логику приворачивать. Это, например, если на интерфейсе 2 адреса из одной подсети, по умолчанию берётся первый, а нужно выходить со второго, но только если исход через этот интерфейс.
Тогда можно спрашивать выходной интерфейс через `ip route get` или его APIшный аналог.