From: Daniel Stutzbach Date: Fri, 3 Sep 2010 12:38:33 +0000 (+0000) Subject: Fix Issue9753: socket.dup() does not always work right on Windows X-Git-Tag: v3.2a2~66 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6c765284a305db7a1afbbd8b05ef39835848e7c1;p=thirdparty%2FPython%2Fcpython.git Fix Issue9753: socket.dup() does not always work right on Windows --- diff --git a/Misc/NEWS b/Misc/NEWS index 4053dd76d33e..45e27c612b42 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -155,6 +155,9 @@ Extensions 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. diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 8c743d87f5e6..6ebb9d938506 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -351,16 +351,13 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 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