@@ -25,7 +25,7 @@ use windows_sys::Win32::Networking::WinSock::{
2525    self ,  tcp_keepalive,  FIONBIO ,  IN6_ADDR ,  IN6_ADDR_0 ,  INVALID_SOCKET ,  IN_ADDR ,  IN_ADDR_0 , 
2626    POLLERR ,  POLLHUP ,  POLLRDNORM ,  POLLWRNORM ,  SD_BOTH ,  SD_RECEIVE ,  SD_SEND ,  SIO_KEEPALIVE_VALS , 
2727    SOCKET_ERROR ,  WSABUF ,  WSAEMSGSIZE ,  WSAESHUTDOWN ,  WSAPOLLFD ,  WSAPROTOCOL_INFOW , 
28-     WSA_FLAG_NO_HANDLE_INHERIT ,  WSA_FLAG_OVERLAPPED , 
28+     WSA_FLAG_NO_HANDLE_INHERIT ,  WSA_FLAG_OVERLAPPED ,   WSA_FLAG_REGISTERED_IO , 
2929} ; 
3030#[ cfg( feature = "all" ) ]  
3131use  windows_sys:: Win32 :: Networking :: WinSock :: { 
@@ -125,13 +125,21 @@ impl Type {
125125    /// Our custom flag to set `WSA_FLAG_NO_HANDLE_INHERIT` on socket creation. 
126126     /// Trying to mimic `Type::cloexec` on windows. 
127127     const  NO_INHERIT :  c_int  = 1  << ( ( size_of :: < c_int > ( )  *  8 )  - 1 ) ;  // Last bit. 
128+     /// Our custom flag to set `WSA_FLAG_REGISTERED_IO` on socket creation. 
129+      const  REGISTERED_IO :  c_int  = 1  << ( ( size_of :: < c_int > ( )  *  8 )  - 2 ) ;  // Second last bit. 
128130
129131    /// Set `WSA_FLAG_NO_HANDLE_INHERIT` on the socket. 
130132     #[ cfg( feature = "all" ) ]  
131133    pub  const  fn  no_inherit ( self )  -> Type  { 
132134        self . _no_inherit ( ) 
133135    } 
134136
137+     /// Set `WSA_FLAG_REGISTERED_IO` on the socket. 
138+      #[ cfg( feature = "all" ) ]  
139+     pub  const  fn  registered_io ( self )  -> Type  { 
140+         Type ( self . 0  | Type :: REGISTERED_IO ) 
141+     } 
142+ 
135143    pub ( crate )  const  fn  _no_inherit ( self )  -> Type  { 
136144        Type ( self . 0  | Type :: NO_INHERIT ) 
137145    } 
@@ -252,13 +260,19 @@ pub(crate) fn socket_into_raw(socket: Socket) -> RawSocket {
252260pub ( crate )  fn  socket ( family :  c_int ,  mut  ty :  c_int ,  protocol :  c_int )  -> io:: Result < RawSocket >  { 
253261    init ( ) ; 
254262
255-     // Check if we set our custom flag . 
263+     // Check if we set our custom flags . 
256264    let  flags = if  ty &  Type :: NO_INHERIT  != 0  { 
257265        ty = ty &  !Type :: NO_INHERIT ; 
258266        WSA_FLAG_NO_HANDLE_INHERIT 
259267    }  else  { 
260268        0 
261269    } ; 
270+     let  flags = if  ty &  Type :: REGISTERED_IO  != 0  { 
271+         ty = ty &  !Type :: REGISTERED_IO ; 
272+         flags | WSA_FLAG_REGISTERED_IO 
273+     }  else  { 
274+         flags
275+     } ; 
262276
263277    syscall ! ( 
264278        WSASocketW ( 
0 commit comments