@@ -64,6 +64,8 @@ use std::sync::Arc;
64
64
use std:: task:: { Context , Poll , Waker } ;
65
65
use std:: time:: { Duration , Instant } ;
66
66
67
+ #[ cfg( all( not( async_io_no_io_safety) , unix) ) ]
68
+ use std:: os:: unix:: io:: { AsFd , BorrowedFd , OwnedFd } ;
67
69
#[ cfg( unix) ]
68
70
use std:: {
69
71
os:: unix:: io:: { AsRawFd , RawFd } ,
@@ -73,6 +75,8 @@ use std::{
73
75
74
76
#[ cfg( windows) ]
75
77
use 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 } ;
76
80
77
81
use futures_lite:: io:: { AsyncRead , AsyncWrite } ;
78
82
use futures_lite:: stream:: { self , Stream } ;
@@ -552,6 +556,31 @@ impl<T: AsRawFd> AsRawFd for Async<T> {
552
556
}
553
557
}
554
558
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
+
555
584
#[ cfg( windows) ]
556
585
impl < T : AsRawSocket > Async < T > {
557
586
/// Creates an async I/O handle.
@@ -612,6 +641,31 @@ impl<T: AsRawSocket> AsRawSocket for Async<T> {
612
641
}
613
642
}
614
643
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
+
615
669
impl < T > Async < T > {
616
670
/// Gets a reference to the inner I/O handle.
617
671
///
0 commit comments