>Зато предлагаемый способ - явно не решение. Если на интерфейсе поднято два
>и более адресов, эта функция уже не подходит. ifconfig тоже видит
>только один первый адрес, тогда как например через zebra или quagga
>можно увидеть более одного адреса. Жаль что используемый в них код
>не столь переносим между различными unix like ОС, но есть реализации
>под каждую из них. Да, не решение. Я оговаривал что это 'пример' (направление куда думать).
Кстати, в линухе ifconfig видит адреса алиасы на интерфейсе (но только в линухе).
Для *nix'ов это конечно системозависимая информация, поэтому нет единообразного способа доступа к ней.
>Не хотел обидеть ни вас, ни кого другого. Просто поправка: у структуры
>sockaddr надо хотя бы поставить проверку поля sa_family. Вы сможете понять,
>к чему я это говорю, если оставить единственным адресом на данном
>интерфейсе - адрес из inet6.
Ну да и эту проверку конечно надо делать как и все остальные опущенные проверки (пример все таки).
Однако, если нету IPv4-адреса (или интерфейс в дауне), то функция вернет 0.0.0.0 (вырожденный), т.е. сообщит об отсутствии IPv4-адреса. При этом конечно может существовать IPv6-адрес, но так как дело функции вернуть IPv4-адрес, то она нулевым адресом сообщает об отсутствии оного (опять же это верно для линуха, но может быть неверным для других *nix).
Из всего этого следует что IP адрес в программу следует передавать в конфигурации возложив эту проблему на пользователя программы, как это и делают сервера типа apache. IMHO.