File Descriptor Limitations in Various Operating Systems

Most Unix variants provide fixed-size limits on the number of file descriptors that may be open simultaneously. There are usually separate system-wide and per-process limits. These limitations affect the scalability of a program like Medusa. I would like to collect information on what these limits are on various operating systems, along with advice on how to raise them.

If you have data for a particular operating system, please send it along to me so I may include it in the table here. If at all possible please try to verify these limits by experimentation, and indicate this fact to me in your message.

Note:At the time of this writing, the 2.1.x series of Linux has an unfortunate bug in select() and poll() that silently ignores all but the first 256 descriptors passed to them. This is supposed to be fixed in the 2.2 series.

Operating System Process System select() poll() Notes
Linux 2.0.34+ 256 1024 NR_OPEN emulated with select() recompile kernel to raise limits
Linux 2.1.x 1024 4096 emulated with poll() bug-limited to 256 recompile kernel to raise limits
Windows NT no hard limit ??? no hard limit not available Redefine FD_SETSIZE, recompile app.
(also check WSADATA.iMaxSockets)
FreeBSD 2 no hard limit no hard limit yes no Raise MBUF clusters, recompile kernel, redefine FD_SETSIZE and recompile app, use sysctl, and limits to run.

Samual M. Rushing
Last modified: Sun May 16 04:25:15 PDT 1999