Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
socketmodule: improve compatibility for UWP.
10 changes: 5 additions & 5 deletions Modules/clinic/socketmodule.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 20 additions & 10 deletions Modules/socketmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -327,6 +327,10 @@ shutdown(how) -- shut down traffic in one or both directions\n\
// For if_nametoindex() and if_indextoname()
#include <iphlpapi.h>

#ifndef RPC_S_OK
#define RPC_S_OK 0L
#endif

/* remove some flags on older version Windows during run-time.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms738596.aspx */
typedef struct {
Expand Down Expand Up @@ -631,14 +635,14 @@ _PyLong_##NAME##_Converter(PyObject *obj, void *ptr) \
return 1; \
}

#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)
# ifdef MS_WINDOWS
UNSIGNED_INT_CONVERTER(NetIfindex, NET_IFINDEX)
# else
# define _PyLong_NetIfindex_Converter _PyLong_UnsignedInt_Converter
# define NET_IFINDEX unsigned int
# endif
#endif // defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
#endif // defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)

/*[python input]
class NET_IFINDEX_converter(CConverter):
Expand Down Expand Up @@ -5885,10 +5889,12 @@ socket_gethostname(PyObject *self, PyObject *unused)
Otherwise, gethostname apparently also returns the DNS name. */
wchar_t buf[MAX_COMPUTERNAME_LENGTH + 1];
DWORD size = Py_ARRAY_LENGTH(buf);
wchar_t *name;
PyObject *result;

#ifdef MS_WINDOWS_DESKTOP
if (GetComputerNameExW(ComputerNamePhysicalDnsHostname, buf, &size))
#else
if (GetComputerNameW(buf, &size))
#endif
return PyUnicode_FromWideChar(buf, size);

if (GetLastError() != ERROR_MORE_DATA)
Expand All @@ -5897,9 +5903,12 @@ socket_gethostname(PyObject *self, PyObject *unused)
if (size == 0)
return Py_GetConstant(Py_CONSTANT_EMPTY_STR);

#ifndef MS_WINDOWS_DESKTOP
return NULL;
#else
/* MSDN says ERROR_MORE_DATA may occur because DNS allows longer
names */
name = PyMem_New(wchar_t, size);
wchar_t* name = PyMem_New(wchar_t, size);
if (!name) {
PyErr_NoMemory();
return NULL;
Expand All @@ -5913,9 +5922,10 @@ socket_gethostname(PyObject *self, PyObject *unused)
return NULL;
}

result = PyUnicode_FromWideChar(name, size);
PyObject* result = PyUnicode_FromWideChar(name, size);
PyMem_Free(name);
return result;
#endif
#else
char buf[1024];
int res;
Expand Down Expand Up @@ -7202,7 +7212,7 @@ Set the default timeout in seconds (real number) for new socket objects.\n\
A value of None indicates that new socket objects have no timeout.\n\
When the socket module is first imported, the default is None.");

#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)
/* Python API for getting interface indices and names */

static PyObject *
Expand Down Expand Up @@ -7343,7 +7353,7 @@ _socket_if_indextoname_impl(PyObject *module, NET_IFINDEX index)
return PyUnicode_DecodeFSDefault(name);
}

#endif // defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
#endif // defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)


#ifdef CMSG_LEN
Expand Down Expand Up @@ -7479,7 +7489,7 @@ static PyMethodDef socket_methods[] = {
METH_NOARGS, getdefaulttimeout_doc},
{"setdefaulttimeout", socket_setdefaulttimeout,
METH_O, setdefaulttimeout_doc},
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS)
#if defined(HAVE_IF_NAMEINDEX) || defined(MS_WINDOWS_DESKTOP)
{"if_nameindex", socket_if_nameindex,
METH_NOARGS, if_nameindex_doc},
_SOCKET_IF_NAMETOINDEX_METHODDEF
Expand Down Expand Up @@ -9301,7 +9311,7 @@ socket_exec(PyObject *m)
}
#endif

#ifdef MS_WINDOWS
#ifdef MS_WINDOWS_DESKTOP
/* remove some flags on older version Windows during run-time */
if (remove_unusable_flags(m) < 0) {
goto error;
Expand Down
Loading