@@ -134,7 +134,7 @@ impl Socket {
134
134
135
135
unsafe {
136
136
let socket = Self :: from_raw_socket ( socket) ;
137
- socket. set_no_inherit ( ) ?;
137
+ socket. 0 . set_no_inherit ( ) ?;
138
138
Ok ( socket)
139
139
}
140
140
}
@@ -213,52 +213,7 @@ impl Socket {
213
213
}
214
214
215
215
pub fn duplicate ( & self ) -> io:: Result < Socket > {
216
- let mut info = unsafe { mem:: zeroed :: < c:: WSAPROTOCOL_INFO > ( ) } ;
217
- let result = unsafe {
218
- c:: WSADuplicateSocketW ( self . as_raw_socket ( ) , c:: GetCurrentProcessId ( ) , & mut info)
219
- } ;
220
- cvt ( result) ?;
221
- let socket = unsafe {
222
- c:: WSASocketW (
223
- info. iAddressFamily ,
224
- info. iSocketType ,
225
- info. iProtocol ,
226
- & mut info,
227
- 0 ,
228
- c:: WSA_FLAG_OVERLAPPED | c:: WSA_FLAG_NO_HANDLE_INHERIT ,
229
- )
230
- } ;
231
-
232
- if socket != c:: INVALID_SOCKET {
233
- unsafe { Ok ( Self :: from_inner ( OwnedSocket :: from_raw_socket ( socket) ) ) }
234
- } else {
235
- let error = unsafe { c:: WSAGetLastError ( ) } ;
236
-
237
- if error != c:: WSAEPROTOTYPE && error != c:: WSAEINVAL {
238
- return Err ( io:: Error :: from_raw_os_error ( error) ) ;
239
- }
240
-
241
- let socket = unsafe {
242
- c:: WSASocketW (
243
- info. iAddressFamily ,
244
- info. iSocketType ,
245
- info. iProtocol ,
246
- & mut info,
247
- 0 ,
248
- c:: WSA_FLAG_OVERLAPPED ,
249
- )
250
- } ;
251
-
252
- if socket == c:: INVALID_SOCKET {
253
- return Err ( last_error ( ) ) ;
254
- }
255
-
256
- unsafe {
257
- let socket = Self :: from_inner ( OwnedSocket :: from_raw_socket ( socket) ) ;
258
- socket. set_no_inherit ( ) ?;
259
- Ok ( socket)
260
- }
261
- }
216
+ Ok ( Self ( self . 0 . try_clone ( ) ?) )
262
217
}
263
218
264
219
fn recv_with_flags ( & self , buf : & mut [ u8 ] , flags : c_int ) -> io:: Result < usize > {
@@ -421,19 +376,6 @@ impl Socket {
421
376
}
422
377
}
423
378
424
- #[ cfg( not( target_vendor = "uwp" ) ) ]
425
- fn set_no_inherit ( & self ) -> io:: Result < ( ) > {
426
- sys:: cvt ( unsafe {
427
- c:: SetHandleInformation ( self . as_raw_socket ( ) as c:: HANDLE , c:: HANDLE_FLAG_INHERIT , 0 )
428
- } )
429
- . map ( drop)
430
- }
431
-
432
- #[ cfg( target_vendor = "uwp" ) ]
433
- fn set_no_inherit ( & self ) -> io:: Result < ( ) > {
434
- Err ( io:: Error :: new_const ( io:: ErrorKind :: Unsupported , & "Unavailable on UWP" ) )
435
- }
436
-
437
379
pub fn shutdown ( & self , how : Shutdown ) -> io:: Result < ( ) > {
438
380
let how = match how {
439
381
Shutdown :: Write => c:: SD_SEND ,
0 commit comments