@@ -134,7 +134,7 @@ impl Socket {
134134
135135 unsafe {
136136 let socket = Self :: from_raw_socket ( socket) ;
137- socket. set_no_inherit ( ) ?;
137+ socket. 0 . set_no_inherit ( ) ?;
138138 Ok ( socket)
139139 }
140140 }
@@ -213,52 +213,7 @@ impl Socket {
213213 }
214214
215215 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 ( ) ?) )
262217 }
263218
264219 fn recv_with_flags ( & self , buf : & mut [ u8 ] , flags : c_int ) -> io:: Result < usize > {
@@ -421,19 +376,6 @@ impl Socket {
421376 }
422377 }
423378
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-
437379 pub fn shutdown ( & self , how : Shutdown ) -> io:: Result < ( ) > {
438380 let how = match how {
439381 Shutdown :: Write => c:: SD_SEND ,
0 commit comments