Я написал эту программу ruby для отправки пакета UDP на порт 16800:
require 'socket'
sock = UDPSocket.new
sock.bind("", 47123)
sock.send("Hello!", 0, "192.168.0.100", 16800)
sock.close
, где 192.168.0.100 - мой собственный IP-адрес. Однако пакет не отображается в Wireshark, и мой UDP-сервер, прослушивающий порт 16800 на том же ПК (под управлением Linux), ничего не получает.
Когда я слегка переписываю программу на
require 'socket'
sock = UDPSocket.new
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
sock.bind("", 47123)
sock.send("Hello!", 0, "<broadcast>", 16800)
sock.close
пакет отображается в Wireshark, но мой сервер все еще ничего не получает.
Я что-то упускаю из виду?
EDIT:
Код сервера, для полноты
require 'socket'
sock = UDPSocket.new
sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
sock.bind(nil, 16800)
while true
packet = sock.recvfrom(1024)
puts packet
end
Однако, это было скопировано где-то из Интернета, и при редактировании его для stackoverflow я обнаружил, что сервер всегда получает пакеты, отправленные на 127.0.0.1, но когда я изменяю nil на "", сервер неожиданно также получает пакеты отправлено выше. Это ошибка в реализации сокета ruby?