/** * getmyip.h - Определение локального IP-адреса для исходящих соединений * * Определяет локальный IP, который ОС выберет для отправки * на заданный удаленный адрес через заданный локальный адрес. */ #ifndef GETMYIP_H #define GETMYIP_H #include #ifdef _WIN32 #include #include #else #include #include #endif #ifdef __cplusplus extern "C" { #endif /** * Определяет локальный IP-адрес, который ОС выберет для отправки * на заданный удаленный адрес через заданный локальный адрес. * * Создает временный UDP-сокет, выполняет bind на local_addr, * connect к remote_addr и получает выбранный локальный IP через getsockname. * * @param local_addr Локальный адрес (0.0.0.0 / :: для автоопределения) * @param remote_addr Удаленный адрес (для определения маршрута) * @param result Заполняемый локальный IP (порт = 0) * @return 0 при успехе, -1 при ошибке */ int get_outgoing_local_ip(const struct sockaddr_storage *local_addr, const struct sockaddr_storage *remote_addr, struct sockaddr_storage *result); #ifdef __cplusplus } #endif #endif