[Python-Dev] Pervasive socket failures on Windows
Scott Dial
scott+python-dev at scottdial.com
Fri Feb 10 22:41:41 CET 2006
Martin v. Löwis wrote:
> Tim Peters wrote:
>> I suggest skipping the new crud conditionalized on a symbol like
>>
>> Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE
>>
>
> Hmm... How about this patch:
>
> Index: Modules/socketmodule.c
> ===================================================================
> --- Modules/socketmodule.c (Revision 42308)
> +++ Modules/socketmodule.c (Arbeitskopie)
> @@ -396,7 +396,14 @@
> static PyTypeObject sock_type;
>
> /* Can we call select() with this socket without a buffer overrun? */
> +#ifdef MS_WINDOWS
> +/* Everything is selectable on Windows */
> +#define IS_SELECTABLE(s) 1
> +#else
> +/* POSIX says selecting descriptors above FD_SETSIZE is undefined
> + behaviour. */
> #define IS_SELECTABLE(s) ((s)->sock_fd < FD_SETSIZE)
> +#endif
>
> static PyObject*
> select_error(void)
>
> Regards,
> Martin
That is the exact patch I applied, but you also need to patch _ssl.c
--- C:/python-trunk/Modules/_ssl.c (revision 42305)
+++ C:/python-trunk/Modules/_ssl.c (working copy)
@@ -376,9 +376,11 @@
if (s->sock_fd < 0)
return SOCKET_HAS_BEEN_CLOSED;
+#ifndef MS_WINDOWS
/* Guard against socket too large for select*/
if (s->sock_fd >= FD_SETSIZE)
return SOCKET_INVALID;
+#endif
/* Construct the arguments to select */
tv.tv_sec = (int)s->sock_timeout;
But then that leaves whether to go with the
Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE symbol instead of MS_WINDOWS.
--
Scott Dial
scott at scottdial.com
dialsa at rose-hulman.edu
More information about the Python-Dev
mailing list