У меня есть два сетевых интерфейса, и я пытаюсь привязать к одному и тому же порту UDP на обоих из них, но я получаю сообщение об ошибке при попытке привязать ко второму, EADDRINUSE
, Когда я привязываю к сокетам, я передаю sockaddr*
где я настроил порт и уникальный IP-адрес для использования.
Должен ли я использовать опцию сокета SO_REUSEADDR
? Позволит ли это получать сообщения через любой сокет или они попадут в сокет, который соответствует IP-адресу, с которым они связаны?
Вы можете bind(2)
один разъем для INADDR_ANY
за IPv4 или in6addr_any
за IPv6 (Вы не должны, но это обычный подход). Это сделает тот единственный сокет способным принимать пакеты от всех сетевых интерфейсов на коробке.
затем SO_REUSEADDR
Опция сокета позволит вам связать другие сокеты с более конкретно адреса, то есть к отдельным интерфейсам и тому же порту.
Пакеты будут приниматься через сокет, связанный с адресом, наиболее соответствующим IP-адресу назначения данного пакета.
Других решений пока нет …