I appreciate that I am now on my own. FWIW, though, your statement
below is untrue, at least on Solaris 8. Open is not limited in the same
way that fopen is w/ regard to # of fds. Also, fwiw, nether is socket(2).
OPEN:
[craigk:/tmp]$ cat /home/craigk/tmp/fopen/foo2.c
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
int main()
{
int i = 0;
int ret;
char filename[100];
do
{
sprintf(filename, "file.%d", i++);
ret = open(filename, O_CREAT);
} while (ret != -1);
fprintf(stderr, "Made it %d times. Errno %d (%s)\n", i, errno,
strerror(errno));
}
[craigk:/tmp]$ ulimit -n
2048
[craigk:/tmp]$ /home/craigk/tmp/fopen/foo2
Made it 2046 times. Errno 24 (Too many open files)
FOPEN:
craigk:/tmp]$ cat /home/craigk/tmp/fopen/foo.c
#include <stdio.h>
#include <errno.h>
#include <fcntl.h>
int main()
{
int i = 0;
FILE *ret;
char filename[100];
do
{
sprintf(filename, "file.%d", i++);
ret = fopen(filename, "a");
} while (ret);
fprintf(stderr, "Made it %d times. Errno %d (%s)\n", i, errno,
strerror(errno));
}
[craigk:/tmp]$ ulimit -n
2048
[craigk:/tmp]$ /home/craigk/tmp/fopen/foo
Made it 254 times. Errno 24 (Too many open files)
Cheers,
Craig
Lutz Jaenicke via RT wrote:
> On Wed, Sep 11, 2002 at 09:21:09AM +0200, Craig Kaes via RT wrote:
>
>>OPEN_MAX, the max # of fds allowable to me is honored by fopen and on
>>BSD and Gnu this value tracks ulimit values. On Solaris, tho, it
>>appears hard coded. To wit:
>>
>>[craigk:~/tmp/fopen]$ cat foo.c
>>#include <stdio.h>
>>#include <errno.h>
>>
>>int main()
>>{
>> int i = 0;
>> while (fopen("/etc/passwd", "r"))
>> {
>> i++;
>> }
>> fprintf(stderr, "Made it %d times. Errno %d (%s)\n", i, errno,
>> strerror(errno));
>>}
>>[craigk:~/tmp/fopen]$ ulimit -n
>>16384
>>[craigk:~/tmp/fopen]$ ./foo
>>Made it 253 times. Errno 24 (Too many open files)
>>[craigk:~/tmp/fopen]$ uname -a
>>SunOS dev3 5.8 Generic_108528-15 sun4u sparc SUNW,Ultra-60
>>
>>Errored out at 253 + stdin + stdout + stderr = 256. How do I work
>>around this issue without rewriting all the BIO stuff to use
>>open/read/write/etc.? Have others encountered and solved this problem?
>> Both the multiplexor and the little fopen test program work the way
>>I'd like them to work on Linux.
>
>
> The "Too many open files" issue is caused by a table limit to the number
> of open files. It does not matter whether you are using buffered (stdio.h:
> fopen, fread, ...) or unbuffered (io.h: open, read, ...) I/O is used.
>
> Depending on the system, the corresponding table sizes are the number
> of file descriptors per process and for the overall system, which
> may be generous (Linux defaults to 1024) or small (HP-UX 10.20 defaults
> to 70(?)). Linux allows even to dynamically extend this value, if
> memory serves me right. On HP-UX these table sizes are kernel settings.
> One has to change the settings and recompile the kernel (and reboot).
> I don't know how this is handled under Solaris.
>
> Please also note, that several processes rely on "select()", which
> may require special handling once the number of open file descriptors
> exceeds FD_SETSIZE.
>
> This is no problem of OpenSSL but of your system setup. I will therefore
> close this ticket.
>
> Best regards,
> Lutz
______________________________________________________________________
OpenSSL Project http://www.openssl.org
Development Mailing List [EMAIL PROTECTED]
Automated List Manager [EMAIL PROTECTED]