J
Joel VanderWerf
I'm trying to use ruby to immitate some C code that broadcasts UDP
packets, but I can only seem to receive packets that are sent to a
specific interface address, not to a broadcast address. Here are the
sender and receiver:
==== sender.rb ====
require 'socket'
port = 1234
#host = "localhost"
host = "192.168.1.3"
#host = "<broadcast>"
#host = "255.255.255.255"
socket = UDPSocket.open
socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
loop do
socket.send("sample data", 0, host, port)
sleep 0.1
end
====
==== receiver.rb ====
require 'socket'
port = 1234
#host = "localhost"
host = "192.168.1.3"
#host = "<any>"
#host = "255.255.255.255"
#host = ""
#host = nil
socket = UDPSocket.open
socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
socket.bind(host, port)
p socket.recvfrom(20)
====
As the two programs are written, the receiver prints out "sample data".
That's also the case when both programs use
host = "localhost"
But for any combination of the broadcast hosts (e.g., "<broadcast>" and
"<any>"), the receiver doesn't get the packet.
Any help is appreciated.
packets, but I can only seem to receive packets that are sent to a
specific interface address, not to a broadcast address. Here are the
sender and receiver:
==== sender.rb ====
require 'socket'
port = 1234
#host = "localhost"
host = "192.168.1.3"
#host = "<broadcast>"
#host = "255.255.255.255"
socket = UDPSocket.open
socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
loop do
socket.send("sample data", 0, host, port)
sleep 0.1
end
====
==== receiver.rb ====
require 'socket'
port = 1234
#host = "localhost"
host = "192.168.1.3"
#host = "<any>"
#host = "255.255.255.255"
#host = ""
#host = nil
socket = UDPSocket.open
socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
socket.bind(host, port)
p socket.recvfrom(20)
====
As the two programs are written, the receiver prints out "sample data".
That's also the case when both programs use
host = "localhost"
But for any combination of the broadcast hosts (e.g., "<broadcast>" and
"<any>"), the receiver doesn't get the packet.
Any help is appreciated.