[Python-checkins] r84450 - in python/branches/py3k: Misc/NEWS Modules/socketmodule.c

daniel.stutzbach python-checkins at python.org
Fri Sep 3 14:38:33 CEST 2010


Author: daniel.stutzbach
Date: Fri Sep  3 14:38:33 2010
New Revision: 84450

Log:
Fix Issue9753: socket.dup() does not always work right on Windows

Modified:
   python/branches/py3k/Misc/NEWS
   python/branches/py3k/Modules/socketmodule.c

Modified: python/branches/py3k/Misc/NEWS
==============================================================================
--- python/branches/py3k/Misc/NEWS	(original)
+++ python/branches/py3k/Misc/NEWS	Fri Sep  3 14:38:33 2010
@@ -155,6 +155,9 @@
 Library
 -------
 
+- Issue #9753: Fixed socket.dup, which did not always work correctly
+  on Windows.
+
 - Issue #7005: Fixed output of None values for RawConfigParser.write and
   ConfigParser.write.
 

Modified: python/branches/py3k/Modules/socketmodule.c
==============================================================================
--- python/branches/py3k/Modules/socketmodule.c	(original)
+++ python/branches/py3k/Modules/socketmodule.c	Fri Sep  3 14:38:33 2010
@@ -351,16 +351,13 @@
 static SOCKET
 dup_socket(SOCKET handle)
 {
-    HANDLE newhandle;
+    WSAPROTOCOL_INFO info;
 
-    if (!DuplicateHandle(GetCurrentProcess(), (HANDLE)handle,
-                         GetCurrentProcess(), &newhandle,
-                         0, FALSE, DUPLICATE_SAME_ACCESS))
-    {
-        WSASetLastError(GetLastError());
+    if (WSADuplicateSocket(handle, GetCurrentProcessId(), &info))
         return INVALID_SOCKET;
-    }
-    return (SOCKET)newhandle;
+
+    return WSASocket(FROM_PROTOCOL_INFO, FROM_PROTOCOL_INFO,
+                     FROM_PROTOCOL_INFO, &info, 0, 0);
 }
 #define SOCKETCLOSE closesocket
 #else


More information about the Python-checkins mailing list