From f84d1b9375ff1d761f39f2878c68b09e3db17027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Sat, 11 Feb 2006 09:27:05 +0000 Subject: Introduce Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE. Proposed by Tim Peters. --- Modules/_ssl.c | 2 ++ Modules/socketmodule.c | 7 +++++++ PC/pyconfig.h | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 6448cb0..0e79b54 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -377,8 +377,10 @@ check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing) return SOCKET_HAS_BEEN_CLOSED; /* Guard against socket too large for select*/ +#ifndef Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE if (s->sock_fd >= FD_SETSIZE) return SOCKET_INVALID; +#endif /* Construct the arguments to select */ tv.tv_sec = (int)s->sock_timeout; diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index 1ec3166..a445581 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -396,7 +396,14 @@ static int taskwindow; static PyTypeObject sock_type; /* Can we call select() with this socket without a buffer overrun? */ +#ifdef Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE +/* Platform can select file descriptors beyond FD_SETSIZE */ +#define IS_SELECTABLE(s) 1 +#else +/* POSIX says selecting file descriptors beyond FD_SETSIZE + has undefined behaviour. */ #define IS_SELECTABLE(s) ((s)->sock_fd < FD_SETSIZE) +#endif static PyObject* select_error(void) diff --git a/PC/pyconfig.h b/PC/pyconfig.h index 33777dc..bb16cfb 100644 --- a/PC/pyconfig.h +++ b/PC/pyconfig.h @@ -572,4 +572,9 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */ /* Define if you have the thread library (-lthread). */ /* #undef HAVE_LIBTHREAD */ + +/* WinSock does not use a bitmask in select, and uses + socket handles greater than FD_SETSIZE */ +#define Py_SOCKET_FD_CAN_BE_GE_FD_SETSIZE + #endif /* !Py_CONFIG_H */ -- cgit v0.12