Bug #8159 » 0001-Fix-multicast-of-rinda.patch
| lib/rinda/ring.rb | ||
|---|---|---|
|
@renewer = Renewer.new
|
||
|
@ts = ts
|
||
|
@sockets = addresses.map do |address|
|
||
|
@sockets = []
|
||
|
addresses.each do |address|
|
||
|
make_socket(address)
|
||
|
end
|
||
| ... | ... | |
|
end
|
||
|
if addrinfo.ipv4_multicast? then
|
||
|
socket.bind(Addrinfo.udp(Socket::INADDR_ANY, @port))
|
||
|
mreq = IPAddr.new(addrinfo.ip_address).hton +
|
||
|
IPAddr.new('0.0.0.0').hton
|
||
|
socket.setsockopt(:IPPROTO_IP, :IP_ADD_MEMBERSHIP, mreq)
|
||
|
else
|
||
|
socket.bind(Addrinfo.udp(nil, @port))
|
||
|
mreq = IPAddr.new(addrinfo.ip_address).hton + [0].pack('I')
|
||
|
socket.setsockopt(:IPPROTO_IPV6, :IPV6_JOIN_GROUP, mreq)
|
||
|
end
|
||
|
else
|
||
|
socket.bind(addrinfo)
|
||
|
end
|
||
|
socket.bind(addrinfo)
|
||
|
@sockets << socket
|
||
|
socket
|
||
|
end
|
||
| test/rinda/test_rinda.rb | ||
|---|---|---|
|
assert(v4mc.getsockopt(:SOCKET, :SO_REUSEADDR).bool)
|
||
|
end
|
||
|
assert_equal('239.0.0.1', v4mc.local_address.ip_address)
|
||
|
assert_equal(@port, v4mc.local_address.ip_port)
|
||
|
assert_equal('0.0.0.0', v4mc.local_address.ip_address)
|
||
|
assert_equal(@port, v4mc.local_address.ip_port)
|
||
|
end
|
||
|
def test_make_socket_ipv6_multicast
|
||
| ... | ... | |
|
assert v6mc.getsockopt(:SOCKET, :SO_REUSEADDR).bool
|
||
|
end
|
||
|
assert_equal('ff02::1', v6mc.local_address.ip_address)
|
||
|
assert_equal('::1', v6mc.local_address.ip_address)
|
||
|
assert_equal(@port, v6mc.local_address.ip_port)
|
||
|
end
|
||