Если я отправлю UDP-пакет, содержащий 'foo', например:
socket = UDPSocket.new
socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
socket.send('foo', 0, '<broadcast>', 40001)
, тогда wireshark сообщит мне, что пакет отправлен правильно, но, к сожалению, его адрес источника 192.168.0.3.Поскольку мой сервер прослушивает localhost: 40001, это означает, что он не получает пакет.Я не хочу, чтобы сервер слушал 0.0.0.0, поскольку он не должен получать аналогичные UDP-запросы, отправленные в другой сети.Я могу заставить сервер слушать в сети 192.168.0.0/24, но позже он будет прослушивать из другой сети, которая не является ни localhost, ни 192.168.0.0/24, так что это не решит проблему.
Есть ли способ выбрать адрес источника, с которого (и интерфейс через который) клиентский сокет отправит свой пакет?