about summary refs log tree commit diff
path: root/src/libstd/sys/wasi/ext
diff options
context:
space:
mode:
authorRyan Levick <ryan.levick@gmail.com>2019-04-11 17:35:36 +0200
committerRyan Levick <ryan.levick@gmail.com>2019-04-11 17:35:36 +0200
commit8678164483bd1509137ce0ee7992f6c25e55df10 (patch)
tree5d466241358491f700d500c4bc3ad683b2294aac /src/libstd/sys/wasi/ext
parent96d700f1b7bc9c53fa0d11567adb1ed2c1c27e79 (diff)
downloadrust-8678164483bd1509137ce0ee7992f6c25e55df10.tar.gz
rust-8678164483bd1509137ce0ee7992f6c25e55df10.zip
Impl RawFd converstion traits for TcpListener, TcpStream and UdpSocket
Diffstat (limited to 'src/libstd/sys/wasi/ext')
-rw-r--r--src/libstd/sys/wasi/ext/io.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/src/libstd/sys/wasi/ext/io.rs b/src/libstd/sys/wasi/ext/io.rs
index cf75a96d28c..12afd1d42dc 100644
--- a/src/libstd/sys/wasi/ext/io.rs
+++ b/src/libstd/sys/wasi/ext/io.rs
@@ -5,6 +5,7 @@
 use crate::fs;
 use crate::io;
 use crate::sys;
+use crate::net;
 use crate::sys_common::{AsInner, FromInner, IntoInner};
 
 /// Raw file descriptors.
@@ -50,6 +51,60 @@ pub trait IntoRawFd {
     fn into_raw_fd(self) -> RawFd;
 }
 
+impl AsRawFd for net::TcpStream {
+    fn as_raw_fd(&self) -> RawFd {
+        self.as_inner().fd().as_raw()
+    }
+}
+
+impl FromRawFd for net::TcpStream {
+    unsafe fn from_raw_fd(fd: RawFd) -> net::TcpStream {
+        net::TcpStream::from_inner(sys::net::TcpStream::from_inner(fd))
+    }
+}
+
+impl IntoRawFd for net::TcpStream {
+    fn into_raw_fd(self) -> RawFd {
+        self.into_inner().into_fd().into_raw()
+    }
+}
+
+impl AsRawFd for net::TcpListener {
+    fn as_raw_fd(&self) -> RawFd {
+        self.as_inner().fd().as_raw()
+    }
+}
+
+impl FromRawFd for net::TcpListener {
+    unsafe fn from_raw_fd(fd: RawFd) -> net::TcpListener {
+        net::TcpListener::from_inner(sys::net::TcpListener::from_inner(fd))
+    }
+}
+
+impl IntoRawFd for net::TcpListener {
+    fn into_raw_fd(self) -> RawFd {
+        self.into_inner().into_fd().into_raw()
+    }
+}
+
+impl AsRawFd for net::UdpSocket {
+    fn as_raw_fd(&self) -> RawFd {
+        self.as_inner().fd().as_raw()
+    }
+}
+
+impl FromRawFd for net::UdpSocket {
+    unsafe fn from_raw_fd(fd: RawFd) -> net::UdpSocket {
+        net::UdpSocket::from_inner(sys::net::UdpSocket::from_inner(fd))
+    }
+}
+
+impl IntoRawFd for net::UdpSocket {
+    fn into_raw_fd(self) -> RawFd {
+        self.into_inner().into_fd().into_raw()
+    }
+}
+
 impl AsRawFd for fs::File {
     fn as_raw_fd(&self) -> RawFd {
         self.as_inner().fd().as_raw()