Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Nov 1998 10:12:07 -0800 (PST)
From:      Marc Slemko <marcs@znep.com>
To:        Nate Williams <nate@mt.sri.com>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: Supporting more than FD_SETSIZE fd's
Message-ID:  <Pine.BSF.4.05.9811091006510.8174-100000@alive.znep.com>
In-Reply-To: <199811091734.KAA04752@mt.sri.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 9 Nov 1998, Nate Williams wrote:

> I looked through the handbook and the FAQ and didn't find anything, so
> hopefully someone can help me out.
> 
> I need to support more than the default 255 FD's in an application (the
> JDK for what it's worth).  To be portable, the code uses fd_set as
> defined in <sys/types.h>.  Unfortunately, unless I redefine FD_SETSIZE
> in every file that uses it, I still have a hard-limit on the number of
> FD's the application can use.
> 
> Is there any 'portable' way of getting around this?  I'd really like to
> have it use whichever open FD that the limit allows, but I know now way
> of having this happen?
> 
> I looked through the code in Apache, and I don't see how it does this,
> since I never saw any re-definition of FD_SETSIZE, or use of anything
> other than fd_setsize.  (Although, I did see mention of FD_SETSIZE quite
> a bit in the comments.)

Apache doesn't use select() on high numbered descriptors so it doesn't
matter.  It does take efforts to move things like logging descriptors up
high so it can keep the first ~15 free for things that need them.

FD_SETSIZE doesn't limit the number of descriptors, it just limits the
highest descriptor you can pass to select().  

There are various possible workarounds:

- use poll().  Only on 3.0 unfortunately.

- on 3.0, FD_SETSIZE defaults to 1024.

- redefine FD_SETSIZE before including sys/types.h.  This may seem to be a
pain, but in most large projects you should have some common header files
you can use for that anyway.  This doesn't fix any libraries that you use
though, which may use select() internally with a small FD_SETSIZE.

Note that Solaris 2.6 is limited to a FD_SETSIZE of 256 (which can't be
changed), so they must have some way around that.  Is likely using poll()
though.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.05.9811091006510.8174-100000>