I've written a small test tool to check if a given system (+ operational environment) can support a given (normally large) number of sockets and whether and how the select() system call/function can support the given number of sockets. It might be a useful check tool for those who are currently suffering from 'too many files' kind of problems with the P1 versions but cannot move to a beta and plan to try and deploy P2.
The test tool is available at http://www.jinmei.org/selecttest.tgz See the README file contained in it about how to build and use it. Hope it helps. --- JINMEI, Tatuya p.s. here are some test results from my own experiments: 1. FreeBSD 7.0(RC1) It can support at least about 4000 sockets. % ./selecttest selecttest: nsocks = 4093, TEST_FDSETSIZE = -1, FD_SETSIZE = 1024, sizeof fd_set = 128 created 4093 sockets, maxfd = 4095 FD_CLR test...OK FD_SET test...OK select test...OK 2. Linux (SuSE 9.2, kernel 2.6.8-24; I know it's old) doesn't allow redefining FD_SETSIZE in the application, but still accepts larger size of fd set in select(). (Note the difference between TEST_FDSETSIZE and FD_SETSIZE) selecttest: nsocks = 4093, TEST_FDSETSIZE = 4096, FD_SETSIZE = 1024, sizeof fd_set = 128 created 4093 sockets, maxfd = 4095 FD_CLR test...OK FD_SET test...OK select test...OK 3. Solaris 10 accepts larger size of fd set if FD_SETSIZE is increased at compilation time. % ./selecttest selecttest: nsocks = 4093, TEST_FDSETSIZE = -1, FD_SETSIZE = 1024, sizeof fd_set = 128 created 4093 sockets, maxfd = 4095 FD_CLR test...OK FD_SET test...OK select: Invalid argument [rebuild the tool with a larger FD_SETSIZE] % ./selecttest selecttest: nsocks = 4093, TEST_FDSETSIZE = 4096, FD_SETSIZE = 4096, sizeof fd_set = 512 created 4093 sockets, maxfd = 4095 FD_CLR test...OK FD_SET test...OK select test...OK 4. HP-UX 11.11...cannot open more than several hundreds sockets. Not sure if this is only in my test environment. # ulimit -n 8192 # ./selecttest selecttest: nsocks = 4093, TEST_FDSETSIZE = -1, FD_SETSIZE = 2048, sizeof fd_set = 256 opening 447th socket failed: File table overflow
