Skip to content

Commit 4f83426

Browse files
committed
std: move network code into sys
As per #117276, this PR moves `sys_common::net` and the `sys::pal::net` into the newly created `sys::net` module. In order to support #135141, I've moved all the current network code into a separate `connection` module, future functions like `hostname` can live in separate modules. I'll probably do a follow-up PR and clean up some of the actual code, this is mostly just a reorganization.
1 parent 6dd75f0 commit 4f83426

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+113
-1036
lines changed

library/std/src/net/socket_addr.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@ mod tests;
66
pub use core::net::{SocketAddr, SocketAddrV4, SocketAddrV6};
77

88
use crate::net::{IpAddr, Ipv4Addr, Ipv6Addr};
9-
use crate::sys::net::netc as c;
10-
use crate::sys_common::net::LookupHost;
9+
use crate::sys::net::{LookupHost, netc as c};
1110
use crate::sys_common::{FromInner, IntoInner};
1211
use crate::{io, iter, mem, option, slice, vec};
1312

library/std/src/net/tcp.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ use crate::io::prelude::*;
1515
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
1616
use crate::iter::FusedIterator;
1717
use crate::net::{Shutdown, SocketAddr, ToSocketAddrs};
18-
use crate::sys_common::{AsInner, FromInner, IntoInner, net as net_imp};
18+
use crate::sys::net as net_imp;
19+
use crate::sys_common::{AsInner, FromInner, IntoInner};
1920
use crate::time::Duration;
2021

2122
/// A TCP stream between a local and a remote socket.

library/std/src/net/udp.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ mod tests;
1212
use crate::fmt;
1313
use crate::io::{self, ErrorKind};
1414
use crate::net::{Ipv4Addr, Ipv6Addr, SocketAddr, ToSocketAddrs};
15-
use crate::sys_common::{AsInner, FromInner, IntoInner, net as net_imp};
15+
use crate::sys::net as net_imp;
16+
use crate::sys_common::{AsInner, FromInner, IntoInner};
1617
use crate::time::Duration;
1718

1819
/// A UDP socket.

library/std/src/os/fd/net.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::os::fd::owned::OwnedFd;
22
use crate::os::fd::raw::{AsRawFd, FromRawFd, IntoRawFd, RawFd};
3-
use crate::sys_common::{self, AsInner, FromInner, IntoInner};
3+
use crate::sys_common::{AsInner, FromInner, IntoInner};
44
use crate::{net, sys};
55

66
macro_rules! impl_as_raw_fd {
@@ -24,7 +24,7 @@ macro_rules! impl_from_raw_fd {
2424
unsafe fn from_raw_fd(fd: RawFd) -> net::$t {
2525
unsafe {
2626
let socket = sys::net::Socket::from_inner(FromInner::from_inner(OwnedFd::from_raw_fd(fd)));
27-
net::$t::from_inner(sys_common::net::$t::from_inner(socket))
27+
net::$t::from_inner(sys::net::$t::from_inner(socket))
2828
}
2929
}
3030
}

library/std/src/os/hermit/io/net.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ macro_rules! impl_from_raw_fd {
2323
unsafe fn from_raw_fd(fd: RawFd) -> net::$t {
2424
unsafe {
2525
let socket = sys::net::Socket::from_inner(FromInner::from_inner(OwnedFd::from_raw_fd(fd)));
26-
net::$t::from_inner(sys_common::net::$t::from_inner(socket))
26+
net::$t::from_inner(sys::net::$t::from_inner(socket))
2727
}
2828
}
2929
}

library/std/src/os/solid/io.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848

4949
use crate::marker::PhantomData;
5050
use crate::mem::ManuallyDrop;
51-
use crate::sys_common::{self, AsInner, FromInner, IntoInner};
51+
use crate::sys_common::{AsInner, FromInner, IntoInner};
5252
use crate::{fmt, net, sys};
5353

5454
/// Raw file descriptors.
@@ -387,7 +387,7 @@ macro_rules! impl_from_raw_fd {
387387
#[inline]
388388
unsafe fn from_raw_fd(fd: RawFd) -> net::$t {
389389
let socket = unsafe { sys::net::Socket::from_raw_fd(fd) };
390-
net::$t::from_inner(sys_common::net::$t::from_inner(socket))
390+
net::$t::from_inner(sys::net::$t::from_inner(socket))
391391
}
392392
}
393393
)*};

library/std/src/os/windows/io/raw.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use crate::os::windows::io::{AsHandle, AsSocket};
77
use crate::os::windows::io::{OwnedHandle, OwnedSocket};
88
use crate::os::windows::raw;
9-
use crate::sys_common::{self, AsInner, FromInner, IntoInner};
9+
use crate::sys_common::{AsInner, FromInner, IntoInner};
1010
use crate::{fs, io, net, ptr, sys};
1111

1212
/// Raw HANDLEs.
@@ -262,7 +262,7 @@ impl FromRawSocket for net::TcpStream {
262262
unsafe fn from_raw_socket(sock: RawSocket) -> net::TcpStream {
263263
unsafe {
264264
let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock));
265-
net::TcpStream::from_inner(sys_common::net::TcpStream::from_inner(sock))
265+
net::TcpStream::from_inner(sys::net::TcpStream::from_inner(sock))
266266
}
267267
}
268268
}
@@ -272,7 +272,7 @@ impl FromRawSocket for net::TcpListener {
272272
unsafe fn from_raw_socket(sock: RawSocket) -> net::TcpListener {
273273
unsafe {
274274
let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock));
275-
net::TcpListener::from_inner(sys_common::net::TcpListener::from_inner(sock))
275+
net::TcpListener::from_inner(sys::net::TcpListener::from_inner(sock))
276276
}
277277
}
278278
}
@@ -282,7 +282,7 @@ impl FromRawSocket for net::UdpSocket {
282282
unsafe fn from_raw_socket(sock: RawSocket) -> net::UdpSocket {
283283
unsafe {
284284
let sock = sys::net::Socket::from_inner(OwnedSocket::from_raw_socket(sock));
285-
net::UdpSocket::from_inner(sys_common::net::UdpSocket::from_inner(sock))
285+
net::UdpSocket::from_inner(sys::net::UdpSocket::from_inner(sock))
286286
}
287287
}
288288
}

library/std/src/sys/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub mod anonymous_pipe;
1212
pub mod backtrace;
1313
pub mod cmath;
1414
pub mod exit_guard;
15+
pub mod net;
1516
pub mod os_str;
1617
pub mod path;
1718
pub mod random;

library/std/src/sys/pal/sgx/net.rs library/std/src/sys/net/connection/sgx.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
use super::abi::usercalls;
21
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
32
use crate::net::{Ipv4Addr, Ipv6Addr, Shutdown, SocketAddr, ToSocketAddrs};
43
use crate::sync::Arc;
4+
use crate::sys::abi::usercalls;
55
use crate::sys::fd::FileDesc;
66
use crate::sys::{AsInner, FromInner, IntoInner, TryIntoInner, sgx_ineffective, unsupported};
77
use crate::time::Duration;

library/std/src/sys_common/net.rs library/std/src/sys/net/connection/socket.rs

+25-5
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,31 @@ use crate::ffi::{c_int, c_void};
55
use crate::io::{self, BorrowedCursor, ErrorKind, IoSlice, IoSliceMut};
66
use crate::net::{Ipv4Addr, Ipv6Addr, Shutdown, SocketAddr};
77
use crate::sys::common::small_c_string::run_with_cstr;
8-
use crate::sys::net::{Socket, cvt, cvt_gai, cvt_r, init, netc as c, wrlen_t};
98
use crate::sys_common::{AsInner, FromInner, IntoInner};
109
use crate::time::Duration;
1110
use crate::{cmp, fmt, mem, ptr};
1211

12+
cfg_if::cfg_if! {
13+
if #[cfg(target_os = "hermit")] {
14+
mod hermit;
15+
pub use hermit::*;
16+
} else if #[cfg(target_os = "solid_asp3")] {
17+
mod solid;
18+
pub use solid::*;
19+
} else if #[cfg(target_family = "unix")] {
20+
mod unix;
21+
pub use unix::*;
22+
} else if #[cfg(all(target_os = "wasi", target_env = "p2"))] {
23+
mod wasip2;
24+
pub use wasip2::*;
25+
} else if #[cfg(target_os = "windows")] {
26+
mod windows;
27+
pub use windows::*;
28+
}
29+
}
30+
31+
use netc as c;
32+
1333
cfg_if::cfg_if! {
1434
if #[cfg(any(
1535
target_os = "dragonfly",
@@ -24,11 +44,11 @@ cfg_if::cfg_if! {
2444
target_os = "nuttx",
2545
target_vendor = "apple",
2646
))] {
27-
use crate::sys::net::netc::IPV6_JOIN_GROUP as IPV6_ADD_MEMBERSHIP;
28-
use crate::sys::net::netc::IPV6_LEAVE_GROUP as IPV6_DROP_MEMBERSHIP;
47+
use c::IPV6_JOIN_GROUP as IPV6_ADD_MEMBERSHIP;
48+
use c::IPV6_LEAVE_GROUP as IPV6_DROP_MEMBERSHIP;
2949
} else {
30-
use crate::sys::net::netc::IPV6_ADD_MEMBERSHIP;
31-
use crate::sys::net::netc::IPV6_DROP_MEMBERSHIP;
50+
use c::IPV6_ADD_MEMBERSHIP;
51+
use c::IPV6_DROP_MEMBERSHIP;
3252
}
3353
}
3454

library/std/src/sys/pal/hermit/net.rs library/std/src/sys/net/connection/socket/hermit.rs

+6-7
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,20 @@
22

33
use core::ffi::c_int;
44

5-
use super::fd::FileDesc;
5+
pub(crate) use hermit_abi as netc;
6+
67
use crate::io::{self, BorrowedBuf, BorrowedCursor, IoSlice, IoSliceMut};
78
use crate::net::{Shutdown, SocketAddr};
89
use crate::os::hermit::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, RawFd};
10+
use crate::sys::fd::FileDesc;
11+
use crate::sys::net::{getsockopt, setsockopt, sockaddr_to_addr};
912
use crate::sys::time::Instant;
10-
use crate::sys_common::net::{getsockopt, setsockopt, sockaddr_to_addr};
13+
pub use crate::sys::{cvt, cvt_r};
1114
use crate::sys_common::{AsInner, FromInner, IntoInner};
1215
use crate::time::Duration;
1316
use crate::{cmp, mem};
1417

15-
#[allow(unused_extern_crates)]
16-
pub extern crate hermit_abi as netc;
17-
18-
pub use crate::sys::{cvt, cvt_r};
19-
18+
#[expect(non_camel_case_types)]
2019
pub type wrlen_t = usize;
2120

2221
pub fn cvt_gai(err: i32) -> io::Result<()> {

library/std/src/sys/pal/solid/net.rs library/std/src/sys/net/connection/socket/solid.rs

+6-18
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
use libc::{c_int, c_void, size_t};
22

33
use self::netc::{MSG_PEEK, sockaddr, socklen_t};
4-
use super::abi;
54
use crate::ffi::CStr;
65
use crate::io::{self, BorrowedBuf, BorrowedCursor, ErrorKind, IoSlice, IoSliceMut};
76
use crate::net::{Shutdown, SocketAddr};
87
use crate::os::solid::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd};
9-
use crate::sys_common::net::{getsockopt, setsockopt, sockaddr_to_addr};
8+
use crate::sys::abi;
9+
use crate::sys::net::{getsockopt, setsockopt, sockaddr_to_addr};
1010
use crate::sys_common::{FromInner, IntoInner};
1111
use crate::time::Duration;
1212
use crate::{cmp, mem, ptr, str};
1313

1414
pub mod netc {
15-
pub use super::super::abi::sockets::*;
15+
pub use crate::sys::abi::sockets::*;
1616
}
1717

18+
#[expect(non_camel_case_types)]
1819
pub type wrlen_t = size_t;
1920

20-
const READ_LIMIT: usize = libc::ssize_t::MAX as usize;
21-
2221
const fn max_iov() -> usize {
2322
// Judging by the source code, it's unlimited, but specify a lower
2423
// value just in case.
@@ -78,7 +77,7 @@ fn last_error() -> io::Error {
7877
io::Error::from_raw_os_error(unsafe { netc::SOLID_NET_GetLastError() })
7978
}
8079

81-
pub(super) fn error_name(er: abi::ER) -> Option<&'static str> {
80+
pub fn error_name(er: abi::ER) -> Option<&'static str> {
8281
unsafe { CStr::from_ptr(netc::strerror(er)) }.to_str().ok()
8382
}
8483

@@ -87,7 +86,7 @@ pub fn is_interrupted(er: abi::ER) -> bool {
8786
er == netc::SOLID_NET_ERR_BASE - libc::EINTR
8887
}
8988

90-
pub(super) fn decode_error_kind(er: abi::ER) -> ErrorKind {
89+
pub fn decode_error_kind(er: abi::ER) -> ErrorKind {
9190
let errno = netc::SOLID_NET_ERR_BASE - er;
9291
match errno as libc::c_int {
9392
libc::ECONNREFUSED => ErrorKind::ConnectionRefused,
@@ -268,17 +267,6 @@ impl Socket {
268267
self.recv_from_with_flags(buf, MSG_PEEK)
269268
}
270269

271-
pub fn write(&self, buf: &[u8]) -> io::Result<usize> {
272-
let ret = cvt(unsafe {
273-
netc::write(
274-
self.as_raw_fd(),
275-
buf.as_ptr() as *const c_void,
276-
cmp::min(buf.len(), READ_LIMIT),
277-
)
278-
})?;
279-
Ok(ret as usize)
280-
}
281-
282270
pub fn write_vectored(&self, bufs: &[IoSlice<'_>]) -> io::Result<usize> {
283271
let ret = cvt(unsafe {
284272
netc::writev(

library/std/src/sys/pal/unix/net.rs library/std/src/sys/net/connection/socket/unix.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ use crate::io::{self, BorrowedBuf, BorrowedCursor, IoSlice, IoSliceMut};
55
use crate::net::{Shutdown, SocketAddr};
66
use crate::os::unix::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd};
77
use crate::sys::fd::FileDesc;
8-
use crate::sys::pal::unix::IsMinusOne;
9-
use crate::sys_common::net::{getsockopt, setsockopt, sockaddr_to_addr};
8+
use crate::sys::net::{getsockopt, setsockopt, sockaddr_to_addr};
9+
use crate::sys::pal::IsMinusOne;
1010
use crate::sys_common::{AsInner, FromInner, IntoInner};
1111
use crate::time::{Duration, Instant};
1212
use crate::{cmp, mem};
@@ -19,11 +19,11 @@ cfg_if::cfg_if! {
1919
}
2020
}
2121

22-
pub use crate::sys::{cvt, cvt_r};
22+
pub(crate) use libc as netc;
2323

24-
#[allow(unused_extern_crates)]
25-
pub extern crate libc as netc;
24+
pub use crate::sys::{cvt, cvt_r};
2625

26+
#[expect(non_camel_case_types)]
2727
pub type wrlen_t = size_t;
2828

2929
pub struct Socket(FileDesc);

library/std/src/sys/pal/wasip2/net.rs library/std/src/sys/net/connection/socket/wasip2.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ use crate::ffi::CStr;
66
use crate::io::{self, BorrowedBuf, BorrowedCursor, IoSlice, IoSliceMut};
77
use crate::net::{Shutdown, SocketAddr};
88
use crate::os::wasi::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
9+
use crate::sys::net::{getsockopt, setsockopt, sockaddr_to_addr};
910
use crate::sys::unsupported;
10-
use crate::sys_common::net::{getsockopt, setsockopt, sockaddr_to_addr};
1111
use crate::sys_common::{AsInner, FromInner, IntoInner};
1212
use crate::time::{Duration, Instant};
1313
use crate::{cmp, mem, str};

library/std/src/sys/pal/windows/net.rs library/std/src/sys/net/connection/socket/windows.rs

+11-10
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::os::windows::io::{
99
};
1010
use crate::sync::OnceLock;
1111
use crate::sys::c;
12-
use crate::sys_common::{AsInner, FromInner, IntoInner, net};
12+
use crate::sys_common::{AsInner, FromInner, IntoInner};
1313
use crate::time::Duration;
1414
use crate::{cmp, mem, ptr, sys};
1515

@@ -110,6 +110,7 @@ pub mod netc {
110110
}
111111
}
112112

113+
#[expect(missing_debug_implementations)]
113114
pub struct Socket(OwnedSocket);
114115

115116
static WSA_CLEANUP: OnceLock<unsafe extern "system" fn() -> i32> = OnceLock::new();
@@ -400,12 +401,12 @@ impl Socket {
400401
let error = unsafe { c::WSAGetLastError() };
401402

402403
if error == c::WSAESHUTDOWN {
403-
Ok((0, net::sockaddr_to_addr(&storage, addrlen as usize)?))
404+
Ok((0, super::sockaddr_to_addr(&storage, addrlen as usize)?))
404405
} else {
405406
Err(io::Error::from_raw_os_error(error))
406407
}
407408
}
408-
_ => Ok((result as usize, net::sockaddr_to_addr(&storage, addrlen as usize)?)),
409+
_ => Ok((result as usize, super::sockaddr_to_addr(&storage, addrlen as usize)?)),
409410
}
410411
}
411412

@@ -450,11 +451,11 @@ impl Socket {
450451
}
451452
None => 0,
452453
};
453-
net::setsockopt(self, c::SOL_SOCKET, kind, timeout)
454+
super::setsockopt(self, c::SOL_SOCKET, kind, timeout)
454455
}
455456

456457
pub fn timeout(&self, kind: c_int) -> io::Result<Option<Duration>> {
457-
let raw: u32 = net::getsockopt(self, c::SOL_SOCKET, kind)?;
458+
let raw: u32 = super::getsockopt(self, c::SOL_SOCKET, kind)?;
458459
if raw == 0 {
459460
Ok(None)
460461
} else {
@@ -487,26 +488,26 @@ impl Socket {
487488
l_linger: linger.unwrap_or_default().as_secs() as c_ushort,
488489
};
489490

490-
net::setsockopt(self, c::SOL_SOCKET, c::SO_LINGER, linger)
491+
super::setsockopt(self, c::SOL_SOCKET, c::SO_LINGER, linger)
491492
}
492493

493494
pub fn linger(&self) -> io::Result<Option<Duration>> {
494-
let val: c::LINGER = net::getsockopt(self, c::SOL_SOCKET, c::SO_LINGER)?;
495+
let val: c::LINGER = super::getsockopt(self, c::SOL_SOCKET, c::SO_LINGER)?;
495496

496497
Ok((val.l_onoff != 0).then(|| Duration::from_secs(val.l_linger as u64)))
497498
}
498499

499500
pub fn set_nodelay(&self, nodelay: bool) -> io::Result<()> {
500-
net::setsockopt(self, c::IPPROTO_TCP, c::TCP_NODELAY, nodelay as c::BOOL)
501+
super::setsockopt(self, c::IPPROTO_TCP, c::TCP_NODELAY, nodelay as c::BOOL)
501502
}
502503

503504
pub fn nodelay(&self) -> io::Result<bool> {
504-
let raw: c::BOOL = net::getsockopt(self, c::IPPROTO_TCP, c::TCP_NODELAY)?;
505+
let raw: c::BOOL = super::getsockopt(self, c::IPPROTO_TCP, c::TCP_NODELAY)?;
505506
Ok(raw != 0)
506507
}
507508

508509
pub fn take_error(&self) -> io::Result<Option<io::Error>> {
509-
let raw: c_int = net::getsockopt(self, c::SOL_SOCKET, c::SO_ERROR)?;
510+
let raw: c_int = super::getsockopt(self, c::SOL_SOCKET, c::SO_ERROR)?;
510511
if raw == 0 { Ok(None) } else { Ok(Some(io::Error::from_raw_os_error(raw as i32))) }
511512
}
512513

library/std/src/sys/pal/wasi/net.rs library/std/src/sys/net/connection/wasip1.rs

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
#![forbid(unsafe_op_in_unsafe_fn)]
22

3-
use super::err2io;
4-
use super::fd::WasiFd;
53
use crate::fmt;
64
use crate::io::{self, BorrowedCursor, IoSlice, IoSliceMut};
75
use crate::net::{Ipv4Addr, Ipv6Addr, Shutdown, SocketAddr};
86
use crate::os::wasi::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd};
9-
use crate::sys::unsupported;
7+
use crate::sys::fd::WasiFd;
8+
use crate::sys::{err2io, unsupported};
109
use crate::sys_common::{AsInner, FromInner, IntoInner};
1110
use crate::time::Duration;
1211

0 commit comments

Comments
 (0)