From a1c313b5e6f00ed4612d1aae0c2ee84171c64b12 Mon Sep 17 00:00:00 2001 From: deraadt <> Date: Wed, 28 May 1997 21:40:11 +0000 Subject: malloc fd_set dynamically, for very large fd uses --- src/lib/libc/net/res_send.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/lib/libc/net/res_send.c') diff --git a/src/lib/libc/net/res_send.c b/src/lib/libc/net/res_send.c index bfc01f9b6a..284f85d7fe 100644 --- a/src/lib/libc/net/res_send.c +++ b/src/lib/libc/net/res_send.c @@ -1,4 +1,4 @@ -/* $OpenBSD: res_send.c,v 1.4 1997/03/13 19:07:41 downsj Exp $ */ +/* $OpenBSD: res_send.c,v 1.5 1997/05/28 21:38:57 deraadt Exp $ */ /* * ++Copyright++ 1985, 1989, 1993 @@ -60,7 +60,7 @@ static char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93"; static char rcsid[] = "$From: res_send.c,v 8.12 1996/10/08 04:51:06 vixie Exp $"; #else -static char rcsid[] = "$OpenBSD: res_send.c,v 1.4 1997/03/13 19:07:41 downsj Exp $"; +static char rcsid[] = "$OpenBSD: res_send.c,v 1.5 1997/05/28 21:38:57 deraadt Exp $"; #endif #endif /* LIBC_SCCS and not lint */ @@ -489,7 +489,7 @@ read_len: * Use datagrams. */ struct timeval timeout; - fd_set dsmask; + fd_set *dsmaskp; struct sockaddr_in from; int fromlen; @@ -595,10 +595,17 @@ read_len: timeout.tv_sec = 1; timeout.tv_usec = 0; wait: - FD_ZERO(&dsmask); - FD_SET(s, &dsmask); - n = select(s+1, &dsmask, (fd_set *)NULL, + dsmaskp = (fd_set *)malloc(howmany(s, NFDBITS) * + sizeof(fd_mask)); + if (dsmaskp == NULL) { + res_close(); + goto next_ns; + } + FD_ZERO(dsmaskp); + FD_SET(s, dsmaskp); + n = select(s+1, dsmaskp, (fd_set *)NULL, (fd_set *)NULL, &timeout); + free(dsmaskp); if (n < 0) { if (errno == EINTR) goto wait; -- cgit v1.2.3-55-g6feb