有没有一种方法可以创建一个UdpSocket而不需要使用bind(),只用send_to()发送数据?

14

我想要做的是相当于这段Ruby代码

def color=(color)
  @color = color
  any_bar = UDPSocket.new
  any_bar.connect HOSTNAME, @port
  any_bar.send @color, 0
  any_bar.close
end

我找不到其他使用Rust API文档中的UdpSocket初始化的方法,除了使用bind()

1个回答

16
我会尝试使用::bind("0.0.0.0:0") - 这样可以让操作系统为您选择一个IP/端口。这对于发送简单数据报的短暂套接字可能已经足够了。 注意:当使用未绑定的UDP套接字(例如使用从socket()系统调用返回的fd而没有调用bind())调用sendto()时,也会发生这种情况 - 操作系统为您分配一个IP/端口来发送数据报。

我正在做这件事。这是否等同于 Ruby 的示例?我很好奇 Ruby 和其它版本是不是只是在网络上抛出一个数据包而没有绑定,或者像这样在后台进行绑定。 - nelsonjchen
哦,我刚刚反思了一下你在问题上的评论。我想是这样的。谢谢! - nelsonjchen
1
这似乎不起作用,如果我想支持ipv4或ipv6发送。当未绑定时。 - Cody Schafer
我想知道 Ruby 中的逻辑是什么。 - nelsonjchen
1
IPv4与IPv6的区别在于,需要创建正确的地址族AF_INETAF_INET6的套接字。对于IPv6,您还需要使用::bind()不同的参数 - 如果我没有记错,是::/0 - emvee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接