Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!lucy.swin.edu.au!news.rmit.EDU.AU!goanna.cs.rmit.edu.au!news.apana.org.au!cantor.edge.net.au!news.teragen.com.au!news.access.net.au!news.mel.connect.com.au!munnari.OZ.AU!spool.mu.edu!howland.erols.net!www.nntp.primenet.com!nntp.primenet.com!data.ramona.vix.com!vixie!nnrp.vix.com!vixie
From: vixie@vix.com (Paul A Vixie)
Newsgroups: comp.unix.bsd.netbsd.misc
Subject: Ouch! (NetBSD 1.2 select() only allows for 256 descriptors)
Followup-To: comp.unix.bsd.netbsd.misc
Date: 08 Feb 1997 04:28:11 GMT
Organization: Vixie Enterprises
Lines: 50
Message-ID: <VIXIE.97Feb7202811@wisdom.vix.com>
NNTP-Posting-Host: wisdom.home.vix.com
Xref: euryale.cc.adfa.oz.au comp.unix.bsd.netbsd.misc:5323
I was getting these strange EINVALs back from select() when trying to do
a select() on more than 256 descriptors. I checked NetBSD 1.2 and saw the
horrible old 4.4BSD version of sys_select():
/*
* Select system call.
*/
int
sys_select(p, v, retval)
register struct proc *p;
void *v;
register_t *retval;
{
register struct sys_select_args /* {
syscallarg(u_int) nd;
syscallarg(fd_set *) in;
syscallarg(fd_set *) ou;
syscallarg(fd_set *) ex;
syscallarg(struct timeval *) tv;
} */ *uap = v;
fd_set ibits[3], obits[3];
struct timeval atv;
int s, ncoll, error = 0, timo;
u_int ni;
bzero((caddr_t)ibits, sizeof(ibits));
bzero((caddr_t)obits, sizeof(obits));
if (SCARG(uap, nd) > FD_SETSIZE)
return (EINVAL);
if (SCARG(uap, nd) > p->p_fd->fd_nfiles) {
/* forgiving; slightly wrong */
SCARG(uap, nd) = p->p_fd->fd_nfiles;
}
ni = howmany(SCARG(uap, nd), NFDBITS) * sizeof(fd_mask);
...
So, OK, sure, I recompiled the kernel with
options FD_SETSIZE=4096
...and now my application isn't wiping out any more. But those bzero()'s
just got a lot more expensive for everybody, even little itty bitty telnetd's
with 5 descriptors total.
Has anybody given any thought to a little creative use of malloc() here?
--
Paul Vixie
La Honda, CA "Illegitimibus non carborundum."
<paul@vix.com>
pacbell!vixie!paul