Вам не нужно bind(2)
для этого.
Здесь вы хотите использовать другой сетевой интерфейс с вашим сокетом. Чтобы использовать сетевой интерфейс, отличный от системного по умолчанию, вам нужно использовать опцию сокета SO_BINDTODEVICE
вместе с setsockopt
. Интерфейс, который вы хотите использовать, например "eth1"
, должен быть указан в виде строки в поле ifr_name
ifreq
struct , которое должно быть передано setsockopt
. Для этого необходимо включить заголовок <net/if.h>
.
По сути, что-то вроде следующего (непроверенного) кода:
int set_interface(int socket_fd, const char* interface_name)
{
ifreq interface;
memset(&interface, 0, sizeof(interface));
strncpy(interface.ifr_name, interface_name, IFNAMSIZ);
int res = setsockopt(socket_fd, SOL_SOCKET, SO_BINDTODEVICE, &ifreq, sizeof(ifreq));
return res;
}
Кроме того, убедитесь, что вы проверили код возврата, в случае сбоя setsockopt
.