Skip to content

Commit 49220cd

Browse files
authored
Rollup merge of rust-lang#131449 - nickrum:wasip2-net-decouple-fd, r=alexcrichton
Decouple WASIp2 sockets from WasiFd This is a follow up to rust-lang#129638, decoupling WASIp2's socket implementation from WASIp1's `WasiFd` as discussed with `@alexcrichton.` Quite a few trait implementations in `std::os::fd` rely on the fact that there is an additional layer of abstraction between `Socket` and `OwnedFd`. I thus had to add a thin `WasiSocket` wrapper struct that just "forwards" to `OwnedFd`. Alternatively, I could have added a lot of conditional compilation to `std::os::fd`, which feels even worse. Since `WasiFd::sock_accept` is no longer accessible from `TcpListener` and since WASIp2 has proper support for accepting sockets through `Socket::accept`, the `std::os::wasi::net` module has been removed from WASIp2, which only contains a single `TcpListenerExt` trait with a `sock_accept` method as well as an implementation for `TcpListener`. Let me know if this is an acceptable solution.
2 parents ff37c08 + 5f495ee commit 49220cd

File tree

2 files changed

+58
-18
lines changed

2 files changed

+58
-18
lines changed

std/src/os/wasi/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
pub mod ffi;
3737
pub mod fs;
3838
pub mod io;
39+
40+
#[cfg(all(target_os = "wasi", target_env = "p1"))]
3941
pub mod net;
4042

4143
/// A prelude for conveniently writing platform-specific code.

std/src/sys/pal/wasip2/net.rs

+56-18
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22

33
use libc::{c_int, c_void, size_t};
44

5-
use super::fd::WasiFd;
65
use crate::ffi::CStr;
76
use crate::io::{self, BorrowedBuf, BorrowedCursor, IoSlice, IoSliceMut};
87
use crate::net::{Shutdown, SocketAddr};
9-
use crate::os::wasi::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, RawFd};
8+
use crate::os::wasi::io::{AsFd, AsRawFd, BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
109
use crate::sys::unsupported;
11-
use crate::sys_common::net::{TcpListener, getsockopt, setsockopt, sockaddr_to_addr};
10+
use crate::sys_common::net::{getsockopt, setsockopt, sockaddr_to_addr};
1211
use crate::sys_common::{AsInner, FromInner, IntoInner};
1312
use crate::time::{Duration, Instant};
1413
use crate::{cmp, mem, str};
@@ -71,7 +70,9 @@ pub fn cvt_gai(err: c_int) -> io::Result<()> {
7170

7271
pub fn init() {}
7372

74-
pub struct Socket(WasiFd);
73+
pub struct WasiSocket(OwnedFd);
74+
75+
pub struct Socket(WasiSocket);
7576

7677
impl Socket {
7778
pub fn new(addr: &SocketAddr, ty: c_int) -> io::Result<Socket> {
@@ -327,53 +328,90 @@ impl Socket {
327328
}
328329
}
329330

330-
impl AsInner<WasiFd> for Socket {
331+
impl AsInner<OwnedFd> for WasiSocket {
331332
#[inline]
332-
fn as_inner(&self) -> &WasiFd {
333+
fn as_inner(&self) -> &OwnedFd {
333334
&self.0
334335
}
335336
}
336337

337-
impl IntoInner<WasiFd> for Socket {
338-
fn into_inner(self) -> WasiFd {
338+
impl IntoInner<OwnedFd> for WasiSocket {
339+
fn into_inner(self) -> OwnedFd {
339340
self.0
340341
}
341342
}
342343

343-
impl FromInner<WasiFd> for Socket {
344-
fn from_inner(inner: WasiFd) -> Socket {
345-
Socket(inner)
344+
impl FromInner<OwnedFd> for WasiSocket {
345+
fn from_inner(owned_fd: OwnedFd) -> Self {
346+
Self(owned_fd)
346347
}
347348
}
348349

349-
impl AsFd for Socket {
350+
impl AsFd for WasiSocket {
350351
fn as_fd(&self) -> BorrowedFd<'_> {
351352
self.0.as_fd()
352353
}
353354
}
354355

355-
impl AsRawFd for Socket {
356+
impl AsRawFd for WasiSocket {
356357
#[inline]
357358
fn as_raw_fd(&self) -> RawFd {
358359
self.0.as_raw_fd()
359360
}
360361
}
361362

362-
impl IntoRawFd for Socket {
363+
impl IntoRawFd for WasiSocket {
363364
fn into_raw_fd(self) -> RawFd {
364365
self.0.into_raw_fd()
365366
}
366367
}
367368

368-
impl FromRawFd for Socket {
369+
impl FromRawFd for WasiSocket {
369370
unsafe fn from_raw_fd(raw_fd: RawFd) -> Self {
370371
unsafe { Self(FromRawFd::from_raw_fd(raw_fd)) }
371372
}
372373
}
373374

374-
impl AsInner<Socket> for TcpListener {
375+
impl AsInner<WasiSocket> for Socket {
376+
#[inline]
377+
fn as_inner(&self) -> &WasiSocket {
378+
&self.0
379+
}
380+
}
381+
382+
impl IntoInner<WasiSocket> for Socket {
383+
fn into_inner(self) -> WasiSocket {
384+
self.0
385+
}
386+
}
387+
388+
impl FromInner<WasiSocket> for Socket {
389+
fn from_inner(sock: WasiSocket) -> Socket {
390+
Socket(sock)
391+
}
392+
}
393+
394+
impl AsFd for Socket {
395+
fn as_fd(&self) -> BorrowedFd<'_> {
396+
self.0.as_fd()
397+
}
398+
}
399+
400+
impl AsRawFd for Socket {
375401
#[inline]
376-
fn as_inner(&self) -> &Socket {
377-
&self.socket()
402+
fn as_raw_fd(&self) -> RawFd {
403+
self.0.as_raw_fd()
404+
}
405+
}
406+
407+
impl IntoRawFd for Socket {
408+
fn into_raw_fd(self) -> RawFd {
409+
self.0.into_raw_fd()
410+
}
411+
}
412+
413+
impl FromRawFd for Socket {
414+
unsafe fn from_raw_fd(raw_fd: RawFd) -> Self {
415+
unsafe { Self(FromRawFd::from_raw_fd(raw_fd)) }
378416
}
379417
}

0 commit comments

Comments
 (0)