@@ -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,16 +126,28 @@ impl Type {
126126 /// Our custom flag to set `WSA_FLAG_NO_HANDLE_INHERIT` on socket creation.
127127 /// Trying to mimic `Type::cloexec` on windows.
128128 const 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 {
133135 self . _no_inherit ( )
134136 }
135137
138+ /// Set `WSA_FLAG_REGISTERED_IO` on the socket.
139+ #[ cfg( feature = "all" ) ]
140+ pub const fn registered_io ( self ) -> Type {
141+ self . _registered_io ( )
142+ }
143+
136144 pub ( crate ) const fn _no_inherit ( self ) -> Type {
137145 Type ( self . 0 | Type :: NO_INHERIT )
138146 }
147+
148+ pub ( crate ) const fn _registered_io ( self ) -> Type {
149+ Type ( self . 0 | Type :: REGISTERED_IO )
150+ }
139151}
140152
141153impl_debug ! (
@@ -253,13 +265,19 @@ pub(crate) fn socket_into_raw(socket: Socket) -> RawSocket {
253265pub ( crate ) fn socket ( family : c_int , mut ty : c_int , protocol : c_int ) -> io:: Result < RawSocket > {
254266 init ( ) ;
255267
256- // Check if we set our custom flag .
268+ // Check if we set our custom flags .
257269 let flags = if ty & Type :: NO_INHERIT != 0 {
258270 ty = ty & !Type :: NO_INHERIT ;
259271 WSA_FLAG_NO_HANDLE_INHERIT
260272 } else {
261273 0
262274 } ;
275+ let flags = if ty & Type :: REGISTERED_IO != 0 {
276+ ty = ty & !Type :: REGISTERED_IO ;
277+ flags | WSA_FLAG_REGISTERED_IO
278+ } else {
279+ flags
280+ } ;
263281
264282 syscall ! (
265283 WSASocketW (
0 commit comments