Sujin Philip created JRUBY-6638:
-----------------------------------
Summary: Multicast UDPSocket send does not work with host and port
Key: JRUBY-6638
URL: https://jira.codehaus.org/browse/JRUBY-6638
Project: JRuby
Issue Type: Bug
Components: Standard Library
Affects Versions: JRuby 1.7
Environment: jruby 1.7.0.dev (ruby-1.9.3-p139) (2012-04-30 4e6078d)
(Java HotSpot(TM) 64-Bit Server VM 1.6.0_26) [linux-amd64-java]
Reporter: Sujin Philip
Assignee: Thomas E Enebo
UDPSocket send seems to be working fine without the multicast.
{code}
jruby-head :001 > require 'socket'
=> true
jruby-head :002 > require 'ipaddr'
=> true
jruby-head :003 > @multicast_ip = "239.221.222.59"
=> "239.221.222.59"
jruby-head :004 > @port = 25464
=> 25464
jruby-head :005 > SOCKET_TIMEOUT = 1
=> 1
jruby-head :006 > def create_multicast_socket
jruby-head :007?> ip = IPAddr.new(@multicast_ip).hton +
IPAddr.new("0.0.0.0").hton
jruby-head :008?> socket = UDPSocket.open
jruby-head :009?> socket.setsockopt(Socket::IPPROTO_IP,
Socket::IP_MULTICAST_TTL, "\x01\x00\x00\x00")
jruby-head :010?> socket.setsockopt(Socket::IPPROTO_IP,
Socket::IP_ADD_MEMBERSHIP, ip)
jruby-head :011?> socket.setsockopt(Socket::SOL_SOCKET,
Socket::SO_REUSEADDR, 1)
jruby-head :012?>
jruby-head :013 > optval = [SOCKET_TIMEOUT, 0].pack("l_2")
jruby-head :014?> socket.setsockopt(Socket::SOL_SOCKET,
Socket::SO_SNDTIMEO, optval)
jruby-head :015?>
jruby-head :016 > socket
jruby-head :017?> end
=> nil
jruby-head :018 >
jruby-head :019 > sender = create_multicast_socket
=> #<UDPSocket:fd 87>
jruby-head :020 > send
send sender
jruby-head :020 > sender.send("Test Data.", 0, @multicast_ip, @port)
Java::JavaLang::NullPointerException:
from org.jruby.ext.socket.RubyUDPSocket.send(RubyUDPSocket.java:307)
from
org.jruby.ext.socket.RubyUDPSocket$INVOKER$i$send.call(RubyUDPSocket$INVOKER$i$send.gen)
from
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:282)
from
org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:71)
from org.jruby.ast.CallManyArgsNode.interpret(CallManyArgsNode.java:59)
from org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
from org.jruby.ast.RootNode.interpret(RootNode.java:129)
from
org.jruby.evaluator.ASTInterpreter.INTERPRET_EVAL(ASTInterpreter.java:96)
from
org.jruby.evaluator.ASTInterpreter.evalWithBinding(ASTInterpreter.java:167)
from org.jruby.RubyKernel.evalCommon(RubyKernel.java:1075)
from org.jruby.RubyKernel.eval19(RubyKernel.java:1037)
from
org.jruby.RubyKernel$INVOKER$s$0$3$eval19.call(RubyKernel$INVOKER$s$0$3$eval19.gen)
from
org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:186)
from
org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:69)
from
org.jruby.ast.FCallManyArgsNode.interpret(FCallManyArgsNode.java:60)
from org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104)
... 116 levels...
from
org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:75)
from
org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190)
from
org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:199)
from
org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312)
from
org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169)
from
home.developer.$_dot_rvm.rubies.jruby_minus_head.bin.irb.__file__(/home/developer/.rvm/rubies/jruby-head/bin/irb:17)
from
home.developer.$_dot_rvm.rubies.jruby_minus_head.bin.irb.load(/home/developer/.rvm/rubies/jruby-head/bin/irb)
from org.jruby.Ruby.runScript(Ruby.java:780)
from org.jruby.Ruby.runScript(Ruby.java:773)
from org.jruby.Ruby.runNormally(Ruby.java:650)
from org.jruby.Ruby.runFromMain(Ruby.java:499)
from org.jruby.Main.doRunFromMain(Main.java:375)
from org.jruby.Main.internalRun(Main.java:264)
from org.jruby.Main.run(Main.java:230)
from org.jruby.Main.run(Main.java:214)
{code}
Although there is a work around.
{code}
ruby-head :028 > sender.connect(@multicast_ip, @port)
=> 0
jruby-head :029 > sender.send("Test Data.", 0)
=> 10
jruby-head :030 >
{code}
This behaviour is only seen with multicast sockets.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email