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

在Ruby中将UDP套接字绑定到通配符主机,ruby,sockets,udp,hole-punching,Ruby,Sockets,Udp,Hole Punching,我一直在试图理解UDP打孔背后的基本思想,但我很难理解以下两种套接字绑定之间的区别: sock = UDPSocket.new sock.bind('', port ) 及 以前我认为使用“”或“0.0.0.0”做了同样的事情——允许套接字在任何网络接口上侦听——但是由于代码不能与它们互换,所以我肯定遗漏了一些东西 对于初始“打孔”,数据报从绑定到“”的套接字发送,然后关闭该套接字,并通过绑定到0.0.0.0的套接字完成与远程主机的实际通信。我知道0.0.0.0通常指的是默认路由,但我不

我一直在试图理解UDP打孔背后的基本思想,但我很难理解以下两种套接字绑定之间的区别:

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

以前我认为使用“”或“0.0.0.0”做了同样的事情——允许套接字在任何网络接口上侦听——但是由于代码不能与它们互换,所以我肯定遗漏了一些东西


对于初始“打孔”,数据报从绑定到“”的套接字发送,然后关闭该套接字,并通过绑定到0.0.0.0的套接字完成与远程主机的实际通信。我知道0.0.0.0通常指的是默认路由,但我不知道在这种情况下它的意义。将套接字绑定到0.0.0.0是否意味着您正在为其分配默认网关的地址?

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

ruby      38156 grych    7u  IPv4 0x40a92a845129cab1      0t0  UDP *:6666
我的系统是Darwin14.0(OSXMavericks),Ruby2.0.0——我想知道它是否依赖于操作系统

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