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: FD_SETSIZE and sizeof(fd_set)


On Jun 23 13:55, Corinna Vinschen wrote:
> On Jun 23 13:52, Corinna Vinschen wrote:
> > On Jun 23 11:36, Steven Bardwell wrote:
> > > > >
> > > > > Here is a "program" that shows the issue I am worried about. It is so simple
> > > > that I must be overlooking something really obvious:
> > > > >
> > > > > #include <stdio.h>
> > > > > #undef FD_SETSIZE
> > > > > #define FD_SETSIZE 256
> > > > > #include <sys/types.h>
> > > > > #include <sys/select.h>
> > > > >
> > > > > main()
> > > > > {
> > > > >         fd_set rfds;
> > > > >         fprintf(stdout, "FD_SETSIZE=%d\n", FD_SETSIZE);
> > > > >         fprintf(stdout, "sizeof(fd_set)=%d\n", sizeof(fd_set));
> > > > > }
> > > > >
> > > > > Steve Bardwell
> > > > >
> > > > >
> > > > 
> > > > I don't know if this is still the case, but when I looked into this years ago I
> > > > found that it was not possible to change the size of the fd set in linux, it's
> > > > fixed at 1024 (generally), unless you rebuild the kernel.
> > > > 
> > > > Secondly, in the windows api, their version of an fd_set is more like a poll()
> > > > implementation, you can fake out any size you want since the size of the
> > > > array is the first entry.
> > > > 
> > > > I can't speak for the cygwin implementations, but if they offer poll() or,
> > > > better, epoll(), use those.
> > > > 
> > > > -lee
> > > 
> > > For what it's worth, this 'program' works as expected in SUA. The size
> > > of the fd_set changes depending on the value of FD_SETSIZE.
> > 
> > In my case it prints 'sizeof(fd_set)=8', which is correct.  For
> > historical reasons and an ill-advised compatibility with old cruft,
> > fd_set is an array of bit per descriptor.  8 * 8 = 256.
> 
> Now that's embarassing.  I guess I shgould go to primary school again.
> 
> Hang on, I 'll have a nother look while I'nm trying to get the red out of
> my face...

Oh yeah, the inclusion of stdio.h also includes sys/select.h so the
first (default) definition of FD_SETSIZE to 64 rules.  In theory it
shouldn't do that so we might have to change it in the newlib headers,
but for th time being, just define FD_SETSIZE before including any
system header.


Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Maintainer                 cygwin AT cygwin DOT com
Red Hat

Attachment: signature.asc
Description: PGP signature


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