@@ -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
} ;
@@ -621,14 +621,14 @@ pub struct Async<T> {
621
621
impl < T > Unpin for Async < T > { }
622
622
623
623
#[ cfg( unix) ]
624
- impl < T : AsRawFd > Async < T > {
624
+ impl < T : AsFd > Async < T > {
625
625
/// Creates an async I/O handle.
626
626
///
627
627
/// This method will put the handle in non-blocking mode and register it in
628
628
/// [epoll]/[kqueue]/[event ports]/[IOCP].
629
629
///
630
- /// On Unix systems, the handle must implement `AsRawFd `, while on Windows it must implement
631
- /// `AsRawSocket `.
630
+ /// On Unix systems, the handle must implement `AsFd `, while on Windows it must implement
631
+ /// `AsSocket `.
632
632
///
633
633
/// [epoll]: https://en.wikipedia.org/wiki/Epoll
634
634
/// [kqueue]: https://en.wikipedia.org/wiki/Kqueue
@@ -647,14 +647,9 @@ impl<T: AsRawFd> Async<T> {
647
647
/// # std::io::Result::Ok(()) });
648
648
/// ```
649
649
pub fn new ( io : T ) -> io:: Result < Async < T > > {
650
- let raw = io. as_raw_fd ( ) ;
650
+ let fd = io. as_fd ( ) ;
651
651
652
652
// Put the file descriptor in non-blocking mode.
653
- //
654
- // Safety: We assume `as_raw_fd()` returns a valid fd. When we can
655
- // depend on Rust >= 1.63, where `AsFd` is stabilized, and when
656
- // `TimerFd` implements it, we can remove this unsafe and simplify this.
657
- let fd = unsafe { rustix:: fd:: BorrowedFd :: borrow_raw ( raw) } ;
658
653
cfg_if:: cfg_if! {
659
654
// ioctl(FIONBIO) sets the flag atomically, but we use this only on Linux
660
655
// for now, as with the standard library, because it seems to behave
@@ -674,19 +669,12 @@ impl<T: AsRawFd> Async<T> {
674
669
}
675
670
676
671
Ok ( Async {
677
- source : Reactor :: get ( ) . insert_io ( raw ) ?,
672
+ source : Reactor :: get ( ) . insert_io ( fd . as_raw_fd ( ) ) ?,
678
673
io : Some ( io) ,
679
674
} )
680
675
}
681
676
}
682
677
683
- #[ cfg( unix) ]
684
- impl < T : AsRawFd > AsRawFd for Async < T > {
685
- fn as_raw_fd ( & self ) -> RawFd {
686
- self . get_ref ( ) . as_raw_fd ( )
687
- }
688
- }
689
-
690
678
#[ cfg( unix) ]
691
679
impl < T : AsFd > AsFd for Async < T > {
692
680
fn as_fd ( & self ) -> BorrowedFd < ' _ > {
@@ -695,7 +683,7 @@ impl<T: AsFd> AsFd for Async<T> {
695
683
}
696
684
697
685
#[ cfg( unix) ]
698
- impl < T : AsRawFd + From < OwnedFd > > TryFrom < OwnedFd > for Async < T > {
686
+ impl < T : AsFd + From < OwnedFd > > TryFrom < OwnedFd > for Async < T > {
699
687
type Error = io:: Error ;
700
688
701
689
fn try_from ( value : OwnedFd ) -> Result < Self , Self :: Error > {
@@ -713,14 +701,14 @@ impl<T: Into<OwnedFd>> TryFrom<Async<T>> for OwnedFd {
713
701
}
714
702
715
703
#[ cfg( windows) ]
716
- impl < T : AsRawSocket > Async < T > {
704
+ impl < T : AsSocket > Async < T > {
717
705
/// Creates an async I/O handle.
718
706
///
719
707
/// This method will put the handle in non-blocking mode and register it in
720
708
/// [epoll]/[kqueue]/[event ports]/[IOCP].
721
709
///
722
- /// On Unix systems, the handle must implement `AsRawFd `, while on Windows it must implement
723
- /// `AsRawSocket `.
710
+ /// On Unix systems, the handle must implement `AsFd `, while on Windows it must implement
711
+ /// `AsSocket `.
724
712
///
725
713
/// [epoll]: https://en.wikipedia.org/wiki/Epoll
726
714
/// [kqueue]: https://en.wikipedia.org/wiki/Kqueue
@@ -739,8 +727,7 @@ impl<T: AsRawSocket> Async<T> {
739
727
/// # std::io::Result::Ok(()) });
740
728
/// ```
741
729
pub fn new ( io : T ) -> io:: Result < Async < T > > {
742
- let sock = io. as_raw_socket ( ) ;
743
- let borrowed = unsafe { rustix:: fd:: BorrowedFd :: borrow_raw ( sock) } ;
730
+ let borrowed = io. as_socket ( ) ;
744
731
745
732
// Put the socket in non-blocking mode.
746
733
//
@@ -750,19 +737,12 @@ impl<T: AsRawSocket> Async<T> {
750
737
rustix:: io:: ioctl_fionbio ( borrowed, true ) ?;
751
738
752
739
Ok ( Async {
753
- source : Reactor :: get ( ) . insert_io ( sock ) ?,
740
+ source : Reactor :: get ( ) . insert_io ( borrowed . as_raw_socket ( ) ) ?,
754
741
io : Some ( io) ,
755
742
} )
756
743
}
757
744
}
758
745
759
- #[ cfg( windows) ]
760
- impl < T : AsRawSocket > AsRawSocket for Async < T > {
761
- fn as_raw_socket ( & self ) -> RawSocket {
762
- self . get_ref ( ) . as_raw_socket ( )
763
- }
764
- }
765
-
766
746
#[ cfg( windows) ]
767
747
impl < T : AsSocket > AsSocket for Async < T > {
768
748
fn as_socket ( & self ) -> BorrowedSocket < ' _ > {
@@ -771,7 +751,7 @@ impl<T: AsSocket> AsSocket for Async<T> {
771
751
}
772
752
773
753
#[ cfg( windows) ]
774
- impl < T : AsRawSocket + From < OwnedSocket > > TryFrom < OwnedSocket > for Async < T > {
754
+ impl < T : AsSocket + From < OwnedSocket > > TryFrom < OwnedSocket > for Async < T > {
775
755
type Error = io:: Error ;
776
756
777
757
fn try_from ( value : OwnedSocket ) -> Result < Self , Self :: Error > {
0 commit comments