将UDP套接字绑定到Ruby中的通配符主机

时间:2015-01-20 10:49:39

标签: ruby sockets udp hole-punching

我一直在努力理解UDP打孔背后的基本思想,而且我无法理解以下两个套接字绑定之间的区别:

 sock = UDPSocket.new
 sock.bind('', port ) 

sock = UDPSocket.new
sock.bind('0.0.0.0', port)

以前我曾想过使用''或'0.0.0.0'做同样的事情 - 允许套接字监听任何网络接口 - 但由于代码不能与它们互换,我必须遗漏一些东西。

对于初始'punch',数据报从绑定到''的套接字发送,然后关闭,并且与远程主机的实际通信通过绑定到0.0.0.0的套接字完成。我知道0.0.0.0一般是指默认路由,但我无法弄清楚在这种情况下的意义。将套接字绑定到0.0.0.0是否意味着您要为其分配默认网关的地址?

1 个答案:

答案 0 :(得分:0)

看起来两者都提供相同的行为:您的套接字正在侦听给定端口上的所有接口:

ruby      38156 grych    7u  IPv4 0x40a92a845129cab1      0t0  UDP *:6666

我的系统是Darwin 14.0(OS X Mavericks),ruby 2.0.0 - 我想知道它是否依赖于操作系统。