@@ -64,6 +64,8 @@ use std::sync::Arc;
6464use std:: task:: { Context , Poll , Waker } ;
6565use std:: time:: { Duration , Instant } ;
6666
67+ #[ cfg( all( not( async_io_no_io_safety) , unix) ) ]
68+ use std:: os:: unix:: io:: { AsFd , BorrowedFd , OwnedFd } ;
6769#[ cfg( unix) ]
6870use std:: {
6971 os:: unix:: io:: { AsRawFd , RawFd } ,
@@ -73,6 +75,8 @@ use std::{
7375
7476#[ cfg( windows) ]
7577use std:: os:: windows:: io:: { AsRawSocket , RawSocket } ;
78+ #[ cfg( all( not( async_io_no_io_safety) , windows) ) ]
79+ use std:: os:: windows:: io:: { AsSocket , BorrowedSocket , OwnedSocket } ;
7680
7781use futures_lite:: io:: { AsyncRead , AsyncWrite } ;
7882use futures_lite:: stream:: { self , Stream } ;
@@ -552,6 +556,31 @@ impl<T: AsRawFd> AsRawFd for Async<T> {
552556 }
553557}
554558
559+ #[ cfg( all( not( async_io_no_io_safety) , unix) ) ]
560+ impl < T : AsFd > AsFd for Async < T > {
561+ fn as_fd ( & self ) -> BorrowedFd < ' _ > {
562+ self . get_ref ( ) . as_fd ( )
563+ }
564+ }
565+
566+ #[ cfg( all( not( async_io_no_io_safety) , unix) ) ]
567+ impl < T : AsRawFd + From < OwnedFd > > TryFrom < OwnedFd > for Async < T > {
568+ type Error = io:: Error ;
569+
570+ fn try_from ( value : OwnedFd ) -> Result < Self , Self :: Error > {
571+ Async :: new ( value. into ( ) )
572+ }
573+ }
574+
575+ #[ cfg( all( not( async_io_no_io_safety) , unix) ) ]
576+ impl < T : Into < OwnedFd > > TryFrom < Async < T > > for OwnedFd {
577+ type Error = io:: Error ;
578+
579+ fn try_from ( value : Async < T > ) -> Result < Self , Self :: Error > {
580+ value. into_inner ( ) . map ( Into :: into)
581+ }
582+ }
583+
555584#[ cfg( windows) ]
556585impl < T : AsRawSocket > Async < T > {
557586 /// Creates an async I/O handle.
@@ -612,6 +641,31 @@ impl<T: AsRawSocket> AsRawSocket for Async<T> {
612641 }
613642}
614643
644+ #[ cfg( all( not( async_io_no_io_safety) , windows) ) ]
645+ impl < T : AsSocket > AsSocket for Async < T > {
646+ fn as_socket ( & self ) -> BorrowedSocket < ' _ > {
647+ self . get_ref ( ) . as_socket ( )
648+ }
649+ }
650+
651+ #[ cfg( all( not( async_io_no_io_safety) , windows) ) ]
652+ impl < T : AsRawSocket + From < OwnedSocket > > TryFrom < OwnedSocket > for Async < T > {
653+ type Error = io:: Error ;
654+
655+ fn try_from ( value : OwnedSocket ) -> Result < Self , Self :: Error > {
656+ Async :: new ( value. into ( ) )
657+ }
658+ }
659+
660+ #[ cfg( all( not( async_io_no_io_safety) , windows) ) ]
661+ impl < T : Into < OwnedSocket > > TryFrom < Async < T > > for OwnedSocket {
662+ type Error = io:: Error ;
663+
664+ fn try_from ( value : Async < T > ) -> Result < Self , Self :: Error > {
665+ value. into_inner ( ) . map ( Into :: into)
666+ }
667+ }
668+
615669impl < T > Async < T > {
616670 /// Gets a reference to the inner I/O handle.
617671 ///
0 commit comments