bind()下面的调用适用于 IPV4,但不适用于 IPV6。
pub enum SocketAddr {
V4(SocketAddrV4),
V6(SocketAddrV6),
}
pub fn new<A: ToSocketAddrs>(local_addr: A, _: Option<u32>) -> io::Result<UdpConnector> {
let mut addr = net::addr_from_trait(local_addr)?;
debug!("Attempting to connect to {:?}", addr);
UdpSocket::bind(addr).expect(&format!("Couldn't bind to address {:?}", addr))
}
Run Code Online (Sandbox Code Playgroud)
我认为我需要scope_id为SocketAddrV6. 但是,我没有SocketAddrV6,我只有一个SocketAddr没有实现scope_id().
我可以调用is_ipv6()它SocketAddr,以查看它是什么类型。如果是IPV6,那么用C语言来说,我想投射到底层SocketAddrV6,所以我可以调用set_scope_id()它。然后我想将结果SocketAddr或SocketAddrV6变量传递给bind().
以下显然仅适用于原始类型:
let addr2 = addr as SocketAddrV6
Run Code Online (Sandbox Code Playgroud)
如果我尝试进行隐式转换,则会出现类型不匹配错误。我想它告诉我这addr是一个枚举,而不是一个SocketAddrV6结构。我知道。我如何在 Rust …
rust ×1