diff options
author | brian <brian@FreeBSD.org> | 2000-10-09 21:18:23 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 2000-10-09 21:18:23 +0000 |
commit | 38c4d01137dc7f3cd19b75f9b4513c9bab16388e (patch) | |
tree | 5fca605418aeeecc4aab375a4c4d001d27a1906d /usr.sbin/ppp/ether.c | |
parent | ecc37ebaa1badd59b516817d9bab52a82eaf84b8 (diff) | |
download | FreeBSD-src-38c4d01137dc7f3cd19b75f9b4513c9bab16388e.zip FreeBSD-src-38c4d01137dc7f3cd19b75f9b4513c9bab16388e.tar.gz |
Create fd_sets big enough to handle getdtablesize() descriptors.
Diffstat (limited to 'usr.sbin/ppp/ether.c')
-rw-r--r-- | usr.sbin/ppp/ether.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/usr.sbin/ppp/ether.c b/usr.sbin/ppp/ether.c index 7d80a69..c9906db 100644 --- a/usr.sbin/ppp/ether.c +++ b/usr.sbin/ppp/ether.c @@ -203,15 +203,23 @@ ether_MessageIn(struct etherdevice *dev) char unknown[14]; const char *msg; struct timeval t; - fd_set r; + fd_set *r; + int ret; if (dev->cs < 0) return; - FD_ZERO(&r); - FD_SET(dev->cs, &r); + if ((r = mkfdset()) == NULL) { + log_Printf(LogERROR, "DoLoop: Cannot create fd_set\n"); + return; + } + zerofdset(r); + FD_SET(dev->cs, r); t.tv_sec = t.tv_usec = 0; - if (select(dev->cs + 1, &r, NULL, NULL, &t) <= 0) + ret = select(dev->cs + 1, r, NULL, NULL, &t); + free(r); + + if (ret <= 0) return; if (NgRecvMsg(dev->cs, rep, sizeof msgbuf, NULL) < 0) |