winxp multicast socket reading problem

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,
 
A

Akif Tokuz

I tried the same code in Linux. It doesnt give any error. So it has to
be with Windows. Anybody knows how to deal with this?

Thanks.

Akif,
 
E

Eric Rubin

I ran into this same problem and finally discovered that in Windows you
have to call bind before setsockopt. This gets rid of the
"setsockopt:Invalid argument(EINVAL)" message.

Eric Rubin

Akif said:
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

But it didnt work again. Now it says
error on setsockopt:Invalid argument(EINVAL)

What could be the problem?

Thanks in advance.

Akif,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,967
Messages
2,570,148
Members
46,694
Latest member
LetaCadwal

Latest Threads

Top