@@ -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 :: { 
@@ -126,15 +126,19 @@ impl Type {
126126    /// Our custom flag to set `WSA_FLAG_NO_HANDLE_INHERIT` on socket creation. 
127127/// Trying to mimic `Type::cloexec` on windows. 
128128const  NO_INHERIT :  c_int  = 1  << ( ( size_of :: < c_int > ( )  *  8 )  - 1 ) ;  // Last bit. 
129+     /// Our custom flag to set `WSA_FLAG_REGISTERED_IO` on socket creation. 
130+ const  REGISTERED_IO :  c_int  = 1  << ( ( size_of :: < c_int > ( )  *  8 )  - 2 ) ;  // Second last bit. 
129131
130132    /// Set `WSA_FLAG_NO_HANDLE_INHERIT` on the socket. 
131133#[ cfg( feature = "all" ) ]  
132134    pub  const  fn  no_inherit ( self )  -> Type  { 
133-         self . _no_inherit ( ) 
135+         Type ( self . 0  |  Type :: NO_INHERIT ) 
134136    } 
135137
136-     pub ( crate )  const  fn  _no_inherit ( self )  -> Type  { 
137-         Type ( self . 0  | Type :: NO_INHERIT ) 
138+     /// Set `WSA_FLAG_REGISTERED_IO` on the socket. 
139+ #[ cfg( feature = "all" ) ]  
140+     pub  const  fn  registered_io ( self )  -> Type  { 
141+         Type ( self . 0  | Type :: REGISTERED_IO ) 
138142    } 
139143} 
140144
@@ -253,13 +257,19 @@ pub(crate) fn socket_into_raw(socket: Socket) -> RawSocket {
253257pub ( crate )  fn  socket ( family :  c_int ,  mut  ty :  c_int ,  protocol :  c_int )  -> io:: Result < RawSocket >  { 
254258    init ( ) ; 
255259
256-     // Check if we set our custom flag . 
260+     // Check if we set our custom flags . 
257261    let  flags = if  ty &  Type :: NO_INHERIT  != 0  { 
258262        ty = ty &  !Type :: NO_INHERIT ; 
259263        WSA_FLAG_NO_HANDLE_INHERIT 
260264    }  else  { 
261265        0 
262266    } ; 
267+     let  flags = if  ty &  Type :: REGISTERED_IO  != 0  { 
268+         ty = ty &  !Type :: REGISTERED_IO ; 
269+         flags | WSA_FLAG_REGISTERED_IO 
270+     }  else  { 
271+         flags
272+     } ; 
263273
264274    syscall ! ( 
265275        WSASocketW ( 
0 commit comments