@@ -11,7 +11,9 @@ use std::io::{self, IoSlice};
11
11
use std:: marker:: PhantomData ;
12
12
use std:: mem:: { self , size_of, MaybeUninit } ;
13
13
use std:: net:: { self , Ipv4Addr , Ipv6Addr , Shutdown } ;
14
- use std:: os:: windows:: io:: { AsRawSocket , FromRawSocket , IntoRawSocket , RawSocket } ;
14
+ use std:: os:: windows:: io:: {
15
+ AsRawSocket , AsSocket , BorrowedSocket , FromRawSocket , IntoRawSocket , OwnedSocket , RawSocket ,
16
+ } ;
15
17
use std:: sync:: Once ;
16
18
use std:: time:: { Duration , Instant } ;
17
19
use std:: { process, ptr, slice} ;
@@ -800,18 +802,45 @@ impl crate::Socket {
800
802
}
801
803
}
802
804
805
+ #[ cfg_attr( docsrs, doc( cfg( windows) ) ) ]
806
+ impl AsSocket for crate :: Socket {
807
+ fn as_socket ( & self ) -> BorrowedSocket < ' _ > {
808
+ // SAFETY: lifetime is bound by self.
809
+ unsafe { BorrowedSocket :: borrow_raw ( self . as_raw ( ) as RawSocket ) }
810
+ }
811
+ }
812
+
813
+ #[ cfg_attr( docsrs, doc( cfg( windows) ) ) ]
803
814
impl AsRawSocket for crate :: Socket {
804
815
fn as_raw_socket ( & self ) -> RawSocket {
805
816
self . as_raw ( ) as RawSocket
806
817
}
807
818
}
808
819
820
+ #[ cfg_attr( docsrs, doc( cfg( windows) ) ) ]
821
+ impl From < crate :: Socket > for OwnedSocket {
822
+ fn from ( sock : crate :: Socket ) -> OwnedSocket {
823
+ // SAFETY: sock.into_raw() always returns a valid fd.
824
+ unsafe { OwnedSocket :: from_raw_socket ( sock. into_raw ( ) as RawSocket ) }
825
+ }
826
+ }
827
+
828
+ #[ cfg_attr( docsrs, doc( cfg( windows) ) ) ]
809
829
impl IntoRawSocket for crate :: Socket {
810
830
fn into_raw_socket ( self ) -> RawSocket {
811
831
self . into_raw ( ) as RawSocket
812
832
}
813
833
}
814
834
835
+ #[ cfg_attr( docsrs, doc( cfg( windows) ) ) ]
836
+ impl From < OwnedSocket > for crate :: Socket {
837
+ fn from ( fd : OwnedSocket ) -> crate :: Socket {
838
+ // SAFETY: `OwnedFd` ensures the fd is valid.
839
+ unsafe { crate :: Socket :: from_raw_socket ( fd. into_raw_socket ( ) ) }
840
+ }
841
+ }
842
+
843
+ #[ cfg_attr( docsrs, doc( cfg( windows) ) ) ]
815
844
impl FromRawSocket for crate :: Socket {
816
845
unsafe fn from_raw_socket ( socket : RawSocket ) -> crate :: Socket {
817
846
crate :: Socket :: from_raw ( socket as Socket )
0 commit comments