about summary refs log tree commit diff
path: root/library/std/src/sys/net/connection/socket.rs
diff options
context:
space:
mode:
authorxizheyin <xizheyin@smail.nju.edu.cn>2025-02-11 01:01:00 +0800
committerxizheyin <xizheyin@smail.nju.edu.cn>2025-02-13 19:39:05 +0800
commit7e7f5d385694ca345e0b47d8c59c7c966ee60a30 (patch)
tree9339f3c947afc2483af7d3cc2f3b30efa2888357 /library/std/src/sys/net/connection/socket.rs
parent3cb02729ab3c6583a3b1d1845c5e22b674f04b8d (diff)
downloadrust-7e7f5d385694ca345e0b47d8c59c7c966ee60a30.tar.gz
rust-7e7f5d385694ca345e0b47d8c59c7c966ee60a30.zip
Replace mem::zeroed with mem::MaybeUninit::uninit for large struct in unix
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
Diffstat (limited to 'library/std/src/sys/net/connection/socket.rs')
-rw-r--r--library/std/src/sys/net/connection/socket.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/library/std/src/sys/net/connection/socket.rs b/library/std/src/sys/net/connection/socket.rs
index b4f0a783680..ddd74b42615 100644
--- a/library/std/src/sys/net/connection/socket.rs
+++ b/library/std/src/sys/net/connection/socket.rs
@@ -557,10 +557,13 @@ impl TcpListener {
     }
 
     pub fn accept(&self) -> io::Result<(TcpStream, SocketAddr)> {
-        let mut storage: c::sockaddr_storage = unsafe { mem::zeroed() };
+        // The `accept` function will fill in the storage with the address,
+        // so we don't need to zero it here.
+        // reference: https://linux.die.net/man/2/accept4
+        let mut storage: mem::MaybeUninit<c::sockaddr_storage> = mem::MaybeUninit::uninit();
         let mut len = mem::size_of_val(&storage) as c::socklen_t;
-        let sock = self.inner.accept((&raw mut storage) as *mut _, &mut len)?;
-        let addr = unsafe { socket_addr_from_c(&storage, len as usize)? };
+        let sock = self.inner.accept(storage.as_mut_ptr() as *mut _, &mut len)?;
+        let addr = unsafe { socket_addr_from_c(storage.as_ptr(), len as usize)? };
         Ok((TcpStream { inner: sock }, addr))
     }