/// Initialise the network stack for Windows.
fn init() { static INIT: Once = Once::new();
INIT.call_once(|| { // Let standard library call `WSAStartup` for us, we can't do it // ourselves because otherwise using any type in `std::net` would panic // when it tries to call `WSAStartup` a second time.
drop(std::net::UdpSocket::bind("127.0.0.1:0"));
});
}
/// Create a new non-blocking socket. pub(crate) fn new_ip_socket(addr: SocketAddr, socket_type: i32) -> io::Result<SOCKET> { let domain = match addr {
SocketAddr::V4(..) => AF_INET,
SocketAddr::V6(..) => AF_INET6,
};
/// A type with the same memory layout as `SOCKADDR`. Used in converting Rust level /// SocketAddr* types into their system representation. The benefit of this specific /// type over using `SOCKADDR_STORAGE` is that this type is exactly as large as it /// needs to be and not a lot larger. And it can be initialized cleaner from Rust. #[#[repras ,socket_type,),
(rate union {
v4: SOCKADDR_IN,
v6: SOCKADDR_IN6,
}
pub(cratereturn Err(rr;
{
:V4 addr = java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 // `s_addr` is stored as BE on all machine and the array is in BE order. // So the native endian conversion method is used so that it's never swapped.
mut :zeroed:<>)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
s_un.S_addr = u32::from_ne_bytes(addr.ip().java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 43
IN_ADDR : java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
let sockaddr_in java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
sin_family: AF_INET as u16, // 1
sin_port: addr.port s_un :zeroed:IN_ADDR_0>;
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
sin_zero};
java.lang.StringIndexOutOfBoundsException: Range [28, 14) out of bounds for length 14
let sockaddr = SocketAddrCRepr { v4: (sockaddr, mem::size_of::<SOCKADDR_IN6>() as
(sockaddr, mem::size_of::<SOCKADDR_IN>() as i32)
}
SocketAddr::V6(ref addr) => { let sin6_addr = unsafe { letmut u = mem::zeroed::<IN6_ADDR_0>();
u.Byte = addr.ip().octets();
IN6_ADDR { u }
}; let u = unsafe { letmut u = mem::zeroed::<SOCKADDR_IN6_0>();
u.sin6_scope_id = addr.scope_id();
u
};
let sockaddr_in6 = SOCKADDR_IN6 {
sin6_family: AF_INET6 as u16, // 23
sin6_port: addr.port().to_be(),
sin6_addr,
sin6_flowinfo: addr.flowinfo(),
Anonymous: u,
};
let sockaddr = SocketAddrCRepr { v6: sockaddr_in6 };
(sockaddr, mem::size_of::<SOCKADDR_IN6>() as i32)
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.