-
Notifications
You must be signed in to change notification settings - Fork 3
attempts of obtaining a broadcast address
tora edited this page Jul 4, 2012
·
6 revisions
require 'socket' require 'ipaddr'
def get_broadcast_address host, port
s = UDPSocket.new
s.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1)
s.bind "0.0.0.0", port
(8..31).each do |mask|
ip = IPAddr.new( "#{host}/#{mask}" ).to_range.max.to_s
# p "#{ip}\n"
s.send "#{ip}\n", 0, ip, port
select( [s], nil, nil, 0.01 ) and return ip
end
nil
ensure
s.close
end
host = IPSocket::getaddress( Socket::gethostname ) port = 9999 p get_broadcast_address host, port
require 'socket' require 'ipaddr' host = IPSocket::getaddress( Socket::gethostname ) s = UDPSocket.new s.send "dummy data", 0, host, 65535 # by sending a dummy data, the OS automatically assigns an unused port. port = s.addr[1] p [ "port number = ", port ] s.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, 1) mask = 8 23.times do ip = IPAddr.new( "#{host}/#{mask}" ).to_range.max.to_s p "#{ip}\n" s.send "#{ip}\n", 0, ip, port mask = mask + 1 end p [ "broadcast address = ", s.gets ]