A
Akif Tokuz
Hi
I am trying to read some data from a multicast address. So I googled and
found this example.
require 'socket'
require 'ipaddr'
MULTICAST_ADDR = "225.4.5.6"
PORT = 5000
ip = IPAddr.new(MULTICAST_ADDR).hton + IPAddr.new("0.0.0.0").hton
sock = UDPSocket.new
sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, ip)
sock.bind(Socket::INADDR_ANY, PORT)
loop do
msg, info = sock.recvfrom(1024)
puts "MSG: #{msg} from #{info[2]} (#{info[3]})/#{info[1]} len
#{msg.size}"
end
It turned out that one-click installer for WinXp(ruby 1.8.6 (2007-03-13
patchlevel 0) [i386-mswin32]) has a bug on Socket::Constants and
Socket::IP_ADD_MEMBERSHIP is not defined.
As explained in
http://rubyforge.org/tracker/?func=detail&group_id=167&aid=9438&atid=715
I added this line
Socket::IP_ADD_MEMBERSHIP = 12 unless
socket.const_defined?('IP_ADD_MEMBERSHIP')
to the top of my code.
But it didnt work again. Now it says
error on setsockopt:Invalid argument(EINVAL)
What could be the problem?
Thanks in advance.
Akif,
I am trying to read some data from a multicast address. So I googled and
found this example.
require 'socket'
require 'ipaddr'
MULTICAST_ADDR = "225.4.5.6"
PORT = 5000
ip = IPAddr.new(MULTICAST_ADDR).hton + IPAddr.new("0.0.0.0").hton
sock = UDPSocket.new
sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, ip)
sock.bind(Socket::INADDR_ANY, PORT)
loop do
msg, info = sock.recvfrom(1024)
puts "MSG: #{msg} from #{info[2]} (#{info[3]})/#{info[1]} len
#{msg.size}"
end
It turned out that one-click installer for WinXp(ruby 1.8.6 (2007-03-13
patchlevel 0) [i386-mswin32]) has a bug on Socket::Constants and
Socket::IP_ADD_MEMBERSHIP is not defined.
As explained in
http://rubyforge.org/tracker/?func=detail&group_id=167&aid=9438&atid=715
I added this line
Socket::IP_ADD_MEMBERSHIP = 12 unless
socket.const_defined?('IP_ADD_MEMBERSHIP')
to the top of my code.
But it didnt work again. Now it says
error on setsockopt:Invalid argument(EINVAL)
What could be the problem?
Thanks in advance.
Akif,