8个版本
0.3.3 | 2024年4月27日 |
---|---|
0.3.2 | 2023年12月17日 |
0.3.0 | 2023年7月27日 |
0.2.2 | 2021年5月23日 |
0.1.0 | 2020年8月29日 |
在网络编程类中排名1397
每月下载381次
在 2 个包中使用
26KB
549 行
multicast-socket
单套接字跨多个接口连接网络
此包提供了一个抽象结构体,允许单套接字在多个接口上监听和响应组播数据包。
默认情况下,当将常规的 std::net::UdpSocket
绑定到未指定的IP地址 0.0.0.0
时,套接字只会将消息发送到操作系统认为的 默认接口
。对于像笔记本电脑、手机、带Wi-Fi的台式机、VPN、带有WSL的Windows、带适配器的Mac等具有多个接口(即“多宿主”)的计算机来说,这并不理想。
此包不是为每个接口创建多个套接字并提供多套接字写入器,而是使用一些C/C++操作系统特定的系统调用和方法来提供单套接字多接口组播体验。
它还提供了一个实用工具构造函数,该函数使用 get_if_addrs
系统调用来查找所有可用的接口以绑定到它,从而提供即开即用的组播多宿主体验。
由于我没有测试项目来验证IPv6的需求,此包是针对IPv4设计的。如果有人建议如何测试IPv6,将来可以扩展。
示例
cargo run --example mdns
用法
[dependencies]
multicast-socket = "0.2.1"
目标
主要级别
- x86_64-unknown-linux-gnu
- x86_64-pc-windows-msvc
- x86_64-apple-darwin
交叉级别
- armv7-unknown-linux-gnueabihf
- aarch64-linux-android
- mips-unknown-linux-musl
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-gnu
许可证
根据以下之一许可
- Apache许可证,版本2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
由您自行选择。
贡献
除非您明确声明,否则根据Apache-2.0许可证定义的,您有意提交以供包含在作品中的任何贡献,应按上述方式双许可,不附加任何额外条款或条件。
参考文献
- https://github.com/alexcrichton/socket2-rs/issues/86
- https://stackoverflow.com/questions/32278414/c-listen-to-multicast-on-all-interfaces-respond-on-same-as-recieved
- https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/ms741687(v=vs.85)
- https://github.com/alexcrichton/socket2-rs/issues/29
- https://github.com/nix-rust/nix/pull/990
- https://github.com/bltavares/colmeia/issues/15
依赖项
~1.9–9MB
~78K SLoC