This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: python doesn't allow descriptors > 63 in select

On 03/08/2011 08:49, Corinna Vinschen wrote:
Hi Jason,

it looks like there's a build glitch in python:

   $ cat><<EOF
   from socket import *
   from select import select

ins = []

   for i in range(1024):
       s = socket(AF_INET, SOCK_STREAM)
       print "socket opened with fd", s.fileno()
       select(ins, [], [], 0)
   $ python
   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 "", 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].


Problem reports:
Unsubscribe info:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]