[Python-Dev] Pervasive socket failures on Windows (original) (raw)

"Martin v. Löwis" martin at v.loewis.de
Sun Feb 12 00:54:41 CET 2006


Tim Peters wrote:

The code in selectmodule when MSCVER is not defined complains if a socket fd is >= FDSETSIZE or is < 0. But the new code in socketmodule on non-Windows boxes is happy with negative fds, saying "fine" whenever fd < FDSETSIZE. Is that right or wrong?

I think it is right: the code just "knows" that negative values cannot happen. The socket handles originate from system calls (socket(2), accept(2)), and a negative value returned there is an error. However, the system might (and did) return handles larger than FD_SETSIZE (as the kernel often won't know what value FD_SETSIZE has).

"The answer" isn't so important to me as that this kind of crap always happens when platform-specific logic ends up getting defined in multiple modules. Much better to define macros to hide this junk, exactly once; pyport.h is the natural place for it.

That must be done carefully, though. For example, how should the line

            max = 0;                     /* not used for Win32 */

be treated? Should we introduce a #define Py_SELECT_NUMBER_OF_FDS_PARAMETER_IS_IRRELEVANT?

Regards, Martin



More information about the Python-Dev mailing list