UDP socket receive question

M

Martin Pirker

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
 
J

Joel VanderWerf

Martin said:
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
 
E

Eric Hodel

--Apple-Mail-1--15181070
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII; format=flowed

^^^
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).

--
Eric Hodel - (e-mail address removed) - http://segment7.net
All messages signed with fingerprint:
FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04


--Apple-Mail-1--15181070
content-type: application/pgp-signature; x-mac-type=70674453;
name=PGP.sig
content-description: This is a digitally signed message part
content-disposition: inline; filename=PGP.sig
content-transfer-encoding: 7bit

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (Darwin)

iD8DBQFBeo9EMypVHHlsnwQRAkbWAJ0W3LHh3WFkk1VDZkTbFwK7z6JNbwCfa4kV
Ns7YxZ7LVleh77FJ2UU01ms=
=hlFS
-----END PGP SIGNATURE-----

--Apple-Mail-1--15181070--
 
J

Joel VanderWerf

Eric said:
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.
 
M

Martin Pirker

Joel VanderWerf said:
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.


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
 

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

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top