Как привязать к одному и тому же порту UDP на нескольких интерфейсах

У меня есть два сетевых интерфейса, и я пытаюсь привязать к одному и тому же порту UDP на обоих из них, но я получаю сообщение об ошибке при попытке привязать ко второму, EADDRINUSE, Когда я привязываю к сокетам, я передаю sockaddr* где я настроил порт и уникальный IP-адрес для использования.

Должен ли я использовать опцию сокета SO_REUSEADDR? Позволит ли это получать сообщения через любой сокет или они попадут в сокет, который соответствует IP-адресу, с которым они связаны?

2

Решение

Вы можете bind(2) один разъем для INADDR_ANY за IPv4 или in6addr_any за IPv6 (Вы не должны, но это обычный подход). Это сделает тот единственный сокет способным принимать пакеты от всех сетевых интерфейсов на коробке.

затем SO_REUSEADDR Опция сокета позволит вам связать другие сокеты с более конкретно адреса, то есть к отдельным интерфейсам и тому же порту.

Пакеты будут приниматься через сокет, связанный с адресом, наиболее соответствующим IP-адресу назначения данного пакета.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]