Hello...
Copying the minimalistic UDP receive example from the online Pickaxe I
require 'socket'
port = 12000
server = UDPSocket.open
server.bind(nil, port)
loop do
text,sender = server.recvfrom(1024)
puts text
end
localhost --> localhost UDP connections work fine
so I tried connecting 2 different boxes
check network connection by netcat:
sender: echo "whatever" |netcat -u 192.168.x.y 12000
receiver: netcat -u -l -p 12000
connection is ok
receiver netcat and sender Ruby script work ok, too
but, with receiver Ruby (like above) neither sender netcat nor Ruby
script are able to make a transfer -> Ruby receiver drops pakets?!?
lsof shows a "UDP localhost:12000" binding, so everything should be ok
on the receiving side
Question:
I simply want a Ruby script collecting all UDP pakets arriving at a
specific port, above script only works for me localhost-->localhost
why?
ruby 1.8.2 (2004-07-16) [i686-linux] (aka pre1)
thanks for any hint, I'm out of ideas
Martin
Martin Pirker wrote:
Hello...
Copying the minimalistic UDP receive example from the online Pickaxe I
require 'socket'
port = 12000
server = UDPSocket.open
server.bind(nil, port)
^^^
Try a hostname here? You can use the string '<any>'. I guess that means any interface.
···
loop do
text,sender = server.recvfrom(1024)
puts text
end
localhost --> localhost UDP connections work fine
so I tried connecting 2 different boxes
check network connection by netcat:
sender: echo "whatever" |netcat -u 192.168.x.y 12000
receiver: netcat -u -l -p 12000
connection is ok
receiver netcat and sender Ruby script work ok, too
but, with receiver Ruby (like above) neither sender netcat nor Ruby
script are able to make a transfer -> Ruby receiver drops pakets?!?
lsof shows a "UDP localhost:12000" binding, so everything should be ok
on the receiving side
Question:
I simply want a Ruby script collecting all UDP pakets arriving at a specific port, above script only works for me localhost-->localhost
why?
ruby 1.8.2 (2004-07-16) [i686-linux] (aka pre1)
thanks for any hint, I'm out of ideas
Martin
No. nil means bind to all interfaces. See getaddrinfo(3).
PGP.sig (186 Bytes)
···
On Oct 22, 2004, at 9:34 PM, Joel VanderWerf wrote:
Martin Pirker wrote:
Hello...
Copying the minimalistic UDP receive example from the online Pickaxe I
require 'socket'
port = 12000
server = UDPSocket.open
server.bind(nil, port)
^^^
Try a hostname here? You can use the string '<any>'. I guess that means any interface.
--
Eric Hodel - drbrain@segment7.net - http://segment7.net
All messages signed with fingerprint:
FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04
but it does fix it
nil gives a "UDP localhost:12000" binding according to lsof
"<any>" and "" gives a "UDP *:12000" binding and appears to work as
expected => accepts any packet arriving from any sender at this port
question is, why I didn't find this myself?
I assumed nothing set aka nil means "don't bind to anything, accept
everything", so I just copied from the example
reading the "socket-level access" paragraph at the beginning points
one to "" as INADDR_ANY, but nowhere a word of "<any>" or a definiton
of nil ?
thanks! always nice&helpful ppl here,
Martin
···
Joel VanderWerf <vjoel@path.berkeley.edu> wrote:
Eric Hodel wrote:
On Oct 22, 2004, at 9:34 PM, Joel VanderWerf wrote:
Martin Pirker wrote:
Copying the minimalistic UDP receive example from the online Pickaxe I
require 'socket'
port = 12000
server = UDPSocket.open
server.bind(nil, port)
^^^
Try a hostname here? You can use the string '<any>'. I guess that
means any interface.
No. nil means bind to all interfaces. See getaddrinfo(3).
Ok, but UDPSocket#bind accepts '<any>' as well. It appears (from brief
groping in etx/socket/socket.c) that nil and '<any>' are synonyms. So
substituting one for the other will not make a difference in the problem
the OP was trying to fix.