summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/res_send.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/net/res_send.c')
-rw-r--r--src/lib/libc/net/res_send.c19
1 files changed, 13 insertions, 6 deletions
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 @@
1/* $OpenBSD: res_send.c,v 1.4 1997/03/13 19:07:41 downsj Exp $ */ 1/* $OpenBSD: res_send.c,v 1.5 1997/05/28 21:38:57 deraadt Exp $ */
2 2
3/* 3/*
4 * ++Copyright++ 1985, 1989, 1993 4 * ++Copyright++ 1985, 1989, 1993
@@ -60,7 +60,7 @@
60static char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93"; 60static char sccsid[] = "@(#)res_send.c 8.1 (Berkeley) 6/4/93";
61static char rcsid[] = "$From: res_send.c,v 8.12 1996/10/08 04:51:06 vixie Exp $"; 61static char rcsid[] = "$From: res_send.c,v 8.12 1996/10/08 04:51:06 vixie Exp $";
62#else 62#else
63static char rcsid[] = "$OpenBSD: res_send.c,v 1.4 1997/03/13 19:07:41 downsj Exp $"; 63static char rcsid[] = "$OpenBSD: res_send.c,v 1.5 1997/05/28 21:38:57 deraadt Exp $";
64#endif 64#endif
65#endif /* LIBC_SCCS and not lint */ 65#endif /* LIBC_SCCS and not lint */
66 66
@@ -489,7 +489,7 @@ read_len:
489 * Use datagrams. 489 * Use datagrams.
490 */ 490 */
491 struct timeval timeout; 491 struct timeval timeout;
492 fd_set dsmask; 492 fd_set *dsmaskp;
493 struct sockaddr_in from; 493 struct sockaddr_in from;
494 int fromlen; 494 int fromlen;
495 495
@@ -595,10 +595,17 @@ read_len:
595 timeout.tv_sec = 1; 595 timeout.tv_sec = 1;
596 timeout.tv_usec = 0; 596 timeout.tv_usec = 0;
597 wait: 597 wait:
598 FD_ZERO(&dsmask); 598 dsmaskp = (fd_set *)malloc(howmany(s, NFDBITS) *
599 FD_SET(s, &dsmask); 599 sizeof(fd_mask));
600 n = select(s+1, &dsmask, (fd_set *)NULL, 600 if (dsmaskp == NULL) {
601 res_close();
602 goto next_ns;
603 }
604 FD_ZERO(dsmaskp);
605 FD_SET(s, dsmaskp);
606 n = select(s+1, dsmaskp, (fd_set *)NULL,
601 (fd_set *)NULL, &timeout); 607 (fd_set *)NULL, &timeout);
608 free(dsmaskp);
602 if (n < 0) { 609 if (n < 0) {
603 if (errno == EINTR) 610 if (errno == EINTR)
604 goto wait; 611 goto wait;