Date: Tue, 17 Oct 95 03:28:53 -0700 From: Bakul Shah <bakul@netcom.com> To: Bruce Evans <bde@zeta.org.au> Cc: terry@lambert.org, current@freefall.freebsd.org, hackers@freefall.freebsd.org Subject: Re: getdtablesize() broken? Message-ID: <199510171028.DAA04795@netcom5.netcom.com> In-Reply-To: Your message of "Tue, 17 Oct 95 19:29:19 %2B1000." <199510170929.TAA03697@godzilla.zeta.org.au>
next in thread | previous in thread | raw e-mail | index | archive | help
> I get 64. Perhaps you have a shell bug.
Possible. Or may be there is an exra fd open. zsh seems to be
the culprit here.
> >It is this hardwired use of FD_SETSIZE *in* the kernel I am
> >bitching about.
> The limit is built in to the fd_set type. The FD_SETSIZE check
> just makes sure that all the bits fit in the kernel fd_set
> variables. The kernel needs to use dynamically allocated
> arrays to hold more bits, and different methods to access the
> bits...
But of course! [My fix was partial but if you decide to
banish FD_SETSIZE removing all use of fd_set follows -- I
should never respond when I am half asleep; but that is when
I get some free time :-(] Anyway, instead of fd_set the
kernel needs to use just int* (and allocate enough ints).
Instead of macros FD_{SET,CLR,ISSET,ZERO} it can use
#define SET_BIT(n, p) ((p)[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
#define CLR_BIT(n, p) ((p)[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
#define ISSET_BIT(n, p) ((p)[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
#define ZERO_BITS(n, p) bzero((char*)(p), \
howmany((n), NFDBITS) * sizeof(fd_mask))
[Going off on another tangent -- I wish we can start using
inline functions instead of such odious macros -- even though
inline is not ISO sanctioned every compiler worth its salt
provides it]
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199510171028.DAA04795>
