rustix-uring
rustix-uring copied to clipboard
How to use Accept with an existing Address from rustix?
opcode::Accept::new wants a mutable types::SocketAddrOpaque.
https://docs.rs/rustix-uring/latest/rustix_uring/opcode/struct.Accept.html
I'm unsure how to prevision one however.
In Rustix there's this trait:
https://docs.rs/rustix/latest/rustix/net/addr/trait.SocketAddrArg.html#tymethod.with_sockaddr
but it provides a constant pointer, not a mutable one.
@LAC-Tech
You aren't really intended to use an existing one in that sense.
Even if you were to use ::with_sockaddr() and ::cast_mut() on the *const SocketAddrOpaque it won't update.
You can do it like this though:
let storage = MaybeUninit::<SocketAddrStorage>::uninit();
let mut addrlen = u32::try_from(size_of_val(&storage))?;
let mut sockaddr = unsafe { SocketAddrAny::new(storage, addrlen) };
let op = opcode::Accept::new(fd, sockaddr.as_mut_ptr().cast(), &mut addrlen);
// ... submit and process cqe
let sockaddr = SocketAddr::try_from(sockaddr)?;