Re: Proper use of select() parameter nfds?

From: Matthew Hagerty <mhagerty(at)voyager(dot)net>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Proper use of select() parameter nfds?
Date: 2001-07-06 14:18:50
Message-ID: 5.0.2.1.2.20010706100719.02202730@pop.voyager.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Well, it proves that it was to late for me when I wrote this. I apologize,
this was supposed to go to FreeBSD hackers, not pgHackers. It does kind of
relate however, because the code snip-it is from the pgWait function in the
fe-misc.c file of the pqlib interface.

I appreciate the response. I had initially understood the correct behavior
but the man page is a bit confusing. I suppose digging into the kernel's
select() would have resolved my suspicions as well, but it is more fun to
talk to all of you! :)

What erks me about this call is that I have to know what file descriptors
are and what the largest one I want to use is. "Technically", for
in/out/err your are supposed to use defines from a lib supplied with your
OS, and for other files you make a var of type FILE and assign the return
result from fopen() (or socket, etc.) to that. I guess my point is that by
having to pass a parameter like nfds, it completely removes all abstraction
and forces me to know something about the kernel internals. This is not a
problem for me, but makes for possibly *very* un-portable code. What if a
file descriptor is a structure on anther OS? I read somewhere once that
the use of 0,1,2 for the in/out/err was something being frowned on since
that could change one day, but select() is not helping things
either. Also, I know of no function that returns the highest file
descriptor I have open for my process.

Thanks for the clarification.

Matthew

At 09:45 AM 7/6/2001 -0400, Alex Pilosov wrote:
>On Fri, 6 Jul 2001, Matthew Hagerty wrote:
>
> > I take this to mean that each descriptor set contains n descriptors and I
> > am interested in examining the first nfds descriptors referenced in my
> > sets. I also understood it to mean that nfds has absolutely nothing to do
> > with the actual *value* of a descriptor, i.e. the value returned by
> > fopen(), socket(), etc.. Is this correct thinking? What got me
> > second-guessing myself was a use of select() that seems to indicate that
> > you have to make sure nfds is larger than the value of the largest
>Correct.
><snip>
>
> > Any clarification on how nfds should be set would be greatly appreciated.
>
>Just like you said:
>"you have to make sure nfds is larger than the value of the largest
>filedescriptor".
>
>
>Reason being: kernel has to know how large is the mask passed to it, and
>how far does it need to look.
>
>-alex

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2001-07-06 14:20:48 Re: AW: AW: Re: Backup and Recovery
Previous Message Peter Eisentraut 2001-07-06 14:17:04 Re: Database Users Management and Privileges