@@ -66,7 +66,7 @@ use std::time::{Duration, Instant};
66
66
67
67
#[ cfg( unix) ]
68
68
use std:: {
69
- os:: unix:: io:: { AsFd , AsRawFd , BorrowedFd , OwnedFd , RawFd } ,
69
+ os:: unix:: io:: { AsFd , AsRawFd , BorrowedFd , OwnedFd } ,
70
70
os:: unix:: net:: { SocketAddr as UnixSocketAddr , UnixDatagram , UnixListener , UnixStream } ,
71
71
path:: Path ,
72
72
} ;
@@ -615,14 +615,14 @@ pub struct Async<T> {
615
615
impl < T > Unpin for Async < T > { }
616
616
617
617
#[ cfg( unix) ]
618
- impl < T : AsRawFd > Async < T > {
618
+ impl < T : AsFd > Async < T > {
619
619
/// Creates an async I/O handle.
620
620
///
621
621
/// This method will put the handle in non-blocking mode and register it in
622
622
/// [epoll]/[kqueue]/[event ports]/[IOCP].
623
623
///
624
- /// On Unix systems, the handle must implement `AsRawFd `, while on Windows it must implement
625
- /// `AsRawSocket `.
624
+ /// On Unix systems, the handle must implement `AsFd `, while on Windows it must implement
625
+ /// `AsSocket `.
626
626
///
627
627
/// [epoll]: https://en.wikipedia.org/wiki/Epoll
628
628
/// [kqueue]: https://en.wikipedia.org/wiki/Kqueue
@@ -641,14 +641,9 @@ impl<T: AsRawFd> Async<T> {
641
641
/// # std::io::Result::Ok(()) });
642
642
/// ```
643
643
pub fn new ( io : T ) -> io:: Result < Async < T > > {
644
- let raw = io. as_raw_fd ( ) ;
644
+ let fd = io. as_fd ( ) ;
645
645
646
646
// Put the file descriptor in non-blocking mode.
647
- //
648
- // Safety: We assume `as_raw_fd()` returns a valid fd. When we can
649
- // depend on Rust >= 1.63, where `AsFd` is stabilized, and when
650
- // `TimerFd` implements it, we can remove this unsafe and simplify this.
651
- let fd = unsafe { rustix:: fd:: BorrowedFd :: borrow_raw ( raw) } ;
652
647
cfg_if:: cfg_if! {
653
648
// ioctl(FIONBIO) sets the flag atomically, but we use this only on Linux
654
649
// for now, as with the standard library, because it seems to behave
@@ -668,19 +663,12 @@ impl<T: AsRawFd> Async<T> {
668
663
}
669
664
670
665
Ok ( Async {
671
- source : Reactor :: get ( ) . insert_io ( raw ) ?,
666
+ source : Reactor :: get ( ) . insert_io ( fd . as_raw_fd ( ) ) ?,
672
667
io : Some ( io) ,
673
668
} )
674
669
}
675
670
}
676
671
677
- #[ cfg( unix) ]
678
- impl < T : AsRawFd > AsRawFd for Async < T > {
679
- fn as_raw_fd ( & self ) -> RawFd {
680
- self . get_ref ( ) . as_raw_fd ( )
681
- }
682
- }
683
-
684
672
#[ cfg( unix) ]
685
673
impl < T : AsFd > AsFd for Async < T > {
686
674
fn as_fd ( & self ) -> BorrowedFd < ' _ > {
@@ -689,7 +677,7 @@ impl<T: AsFd> AsFd for Async<T> {
689
677
}
690
678
691
679
#[ cfg( unix) ]
692
- impl < T : AsRawFd + From < OwnedFd > > TryFrom < OwnedFd > for Async < T > {
680
+ impl < T : AsFd + From < OwnedFd > > TryFrom < OwnedFd > for Async < T > {
693
681
type Error = io:: Error ;
694
682
695
683
fn try_from ( value : OwnedFd ) -> Result < Self , Self :: Error > {
@@ -707,14 +695,14 @@ impl<T: Into<OwnedFd>> TryFrom<Async<T>> for OwnedFd {
707
695
}
708
696
709
697
#[ cfg( windows) ]
710
- impl < T : AsRawSocket > Async < T > {
698
+ impl < T : AsSocket > Async < T > {
711
699
/// Creates an async I/O handle.
712
700
///
713
701
/// This method will put the handle in non-blocking mode and register it in
714
702
/// [epoll]/[kqueue]/[event ports]/[IOCP].
715
703
///
716
- /// On Unix systems, the handle must implement `AsRawFd `, while on Windows it must implement
717
- /// `AsRawSocket `.
704
+ /// On Unix systems, the handle must implement `AsFd `, while on Windows it must implement
705
+ /// `AsSocket `.
718
706
///
719
707
/// [epoll]: https://en.wikipedia.org/wiki/Epoll
720
708
/// [kqueue]: https://en.wikipedia.org/wiki/Kqueue
@@ -733,8 +721,7 @@ impl<T: AsRawSocket> Async<T> {
733
721
/// # std::io::Result::Ok(()) });
734
722
/// ```
735
723
pub fn new ( io : T ) -> io:: Result < Async < T > > {
736
- let sock = io. as_raw_socket ( ) ;
737
- let borrowed = unsafe { rustix:: fd:: BorrowedFd :: borrow_raw ( sock) } ;
724
+ let borrowed = io. as_socket ( ) ;
738
725
739
726
// Put the socket in non-blocking mode.
740
727
//
@@ -744,19 +731,12 @@ impl<T: AsRawSocket> Async<T> {
744
731
rustix:: io:: ioctl_fionbio ( borrowed, true ) ?;
745
732
746
733
Ok ( Async {
747
- source : Reactor :: get ( ) . insert_io ( sock ) ?,
734
+ source : Reactor :: get ( ) . insert_io ( borrowed . as_raw_socket ( ) ) ?,
748
735
io : Some ( io) ,
749
736
} )
750
737
}
751
738
}
752
739
753
- #[ cfg( windows) ]
754
- impl < T : AsRawSocket > AsRawSocket for Async < T > {
755
- fn as_raw_socket ( & self ) -> RawSocket {
756
- self . get_ref ( ) . as_raw_socket ( )
757
- }
758
- }
759
-
760
740
#[ cfg( windows) ]
761
741
impl < T : AsSocket > AsSocket for Async < T > {
762
742
fn as_socket ( & self ) -> BorrowedSocket < ' _ > {
@@ -765,7 +745,7 @@ impl<T: AsSocket> AsSocket for Async<T> {
765
745
}
766
746
767
747
#[ cfg( windows) ]
768
- impl < T : AsRawSocket + From < OwnedSocket > > TryFrom < OwnedSocket > for Async < T > {
748
+ impl < T : AsSocket + From < OwnedSocket > > TryFrom < OwnedSocket > for Async < T > {
769
749
type Error = io:: Error ;
770
750
771
751
fn try_from ( value : OwnedSocket ) -> Result < Self , Self :: Error > {
0 commit comments