python doesn't allow descriptors > 63 in select

Jon TURNEY jon.turney@dronecode.org.uk
Wed Aug 3 11:29:00 GMT 2011


On 03/08/2011 08:49, Corinna Vinschen wrote:
> Hi Jason,
>
> it looks like there's a build glitch in python:
>
>    $ cat>  sel.py<<EOF
>    from socket import *
>    from select import select
>
>    ins = []
>
>    for i in range(1024):
>        s = socket(AF_INET, SOCK_STREAM)
>        ins.append(s)
>        print "socket opened with fd", s.fileno()
>        select(ins, [], [], 0)
>    EOF
>    $ python sel.py
>    socket opened with fd 3
>    socket opened with fd 4
>    socket opened with fd 5
>    [...]
>    socket opened with fd 62
>    socket opened with fd 63
>    socket opened with fd 64
>    socket opened with fd 64
>    Traceback (most recent call last):
>      File "test.py", line 10, in<module>
>        select(ins, [], [], 0)
>    ValueError: filedescriptor out of range in select()
>
> I debugged this and it turns out that python does not call Cygwin's
> select function anymore, as soon as there's a file descriptor in the
> set which is>= 64.
>
> While the default value for FD_SETSIZE is 64 (see /usr/include/sys/types.h):
>
>    #  ifndef      FD_SETSIZE
>    #      define  FD_SETSIZE      64
>
> AFAICS the python default for the fd set is 256, see the definition
> in /usr/include/python2.6/pyport.h:
>
>    #ifndef FD_SETSIZE
>    #define FD_SETSIZE      256
>
> But somehow this didn't make it into the python build.  On my Linux
> box, the same script only stops when it hits the soft descriptor
> limit, 1024 in my case.
>
> Can you have a look and, perhaps, provide a new python with a bigger
> internal FD_SETSIZE?  The 256 from /usr/include/python2.6/pyport.h
> would already be ok, I guess, but 512 or so wouldn't hurt either...

fwiw, I already reported this problem with a patch to fix it at [1].

[1] http://cygwin.com/ml/cygwin/2011-03/msg00651.html

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple



More information about the Cygwin mailing list