about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--inet/rcmd.c18
-rw-r--r--resolv/res_send.c31
3 files changed, 25 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index de5184b588..b03648f51d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+1998-06-25    Andi Kleen <ak@muc.de>
+
+	* inet/rcmd.c (rcmd): Change to use __poll instead of select.
+	* resolv/res_send.c (res_send): Likewise.
+
 1998-06-27 12:58  Ulrich Drepper  <drepper@cygnus.com>
 
 	* sysdeps/unix/bsd/poll.c: Define __poll, make poll weak alias.
diff --git a/inet/rcmd.c b/inet/rcmd.c
index d76eff84e9..e54d894f84 100644
--- a/inet/rcmd.c
+++ b/inet/rcmd.c
@@ -36,6 +36,7 @@ static char sccsid[] = "@(#)rcmd.c	8.3 (Berkeley) 3/26/94";
 #endif /* LIBC_SCCS and not lint */
 
 #include <sys/param.h>
+#include <sys/poll.h>
 #include <sys/socket.h>
 #include <sys/stat.h>
 
@@ -68,7 +69,7 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
 	size_t hstbuflen;
 	char *tmphstbuf;
 	struct sockaddr_in sin, from;
-	fd_set reads;
+	struct pollfd pfd[2];
 	int32_t oldmask;
 	pid_t pid;
 	int s, lport, timo;
@@ -94,6 +95,9 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
 	      tmphstbuf = __alloca (hstbuflen);
 	    }
 
+	pfd[0].events = POLLIN;
+	pfd[1].events = POLLIN;
+
 	*ahost = hp->h_name;
 	oldmask = sigblock(sigmask(SIGURG));
 	for (timo = 1, lport = IPPORT_RESERVED - 1;;) {
@@ -161,18 +165,16 @@ rcmd(ahost, rport, locuser, remuser, cmd, fd2p)
 			(void)close(s2);
 			goto bad;
 		}
-		FD_ZERO(&reads);
-		FD_SET(s, &reads);
-		FD_SET(s2, &reads);
+		pfd[0].fd = s;
+		pfd[1].fd = s2;
 		__set_errno (0);
-		if (select(1 + (s > s2 ? s : s2), &reads, 0, 0, 0) < 1 ||
-		    !FD_ISSET(s2, &reads)) {
+		if (__poll (pfd, 2, -1) < 1 || (pfd[1].revents & POLLIN) == 0){
 			if (errno != 0)
 				(void)fprintf(stderr,
-				  _("rcmd: select (setting up stderr): %m\n"));
+				  _("rcmd: poll (setting up stderr): %m\n"));
 			else
 				(void)fprintf(stderr,
-			     _("select: protocol failure in circuit setup\n"));
+			     _("poll: protocol failure in circuit setup\n"));
 			(void)close(s2);
 			goto bad;
 		}
diff --git a/resolv/res_send.c b/resolv/res_send.c
index e5c6e032e8..38e1e05b60 100644
--- a/resolv/res_send.c
+++ b/resolv/res_send.c
@@ -71,6 +71,7 @@ static char rcsid[] = "$Id$";
 
 #include <sys/types.h>
 #include <sys/param.h>
+#include <sys/poll.h>
 #include <sys/time.h>
 #include <sys/socket.h>
 #include <sys/uio.h>
@@ -98,16 +99,6 @@ static int s = -1;	/* socket used for communications */
 static int connected = 0;	/* is the socket connected */
 static int vc = 0;	/* is the socket a virtual circuit? */
 
-#ifndef FD_SET
-/* XXX - should be in portability.h */
-#define	NFDBITS		32
-#define	FD_SETSIZE	32
-#define	FD_SET(n, p)	((p)->fds_bits[(n)/NFDBITS] |= (1 << ((n) % NFDBITS)))
-#define	FD_CLR(n, p)	((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
-#define	FD_ISSET(n, p)	((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
-#define FD_ZERO(p)	bzero((char *)(p), sizeof(*(p)))
-#endif
-
 /* XXX - this should be done in portability.h */
 #if (defined(BSD) && (BSD >= 199103)) || defined(linux)
 # define CAN_RECONNECT 1
@@ -519,7 +510,7 @@ read_len:
 			/*
 			 * Use datagrams.
 			 */
-			struct timeval timeout;
+			int timeout;
 			fd_set dsmask;
 			struct sockaddr_in from;
 			socklen_t fromlen;
@@ -619,26 +610,24 @@ read_len:
 			/*
 			 * Wait for reply
 			 */
-			timeout.tv_sec = (_res.retrans << try);
+			timeout = (_res.retrans << try) * 1000;
 			if (try > 0)
-				timeout.tv_sec /= _res.nscount;
-			if ((long) timeout.tv_sec <= 0)
-				timeout.tv_sec = 1;
-			timeout.tv_usec = 0;
+				timeout /= _res.nscount;
+			if (timeout <= 0)
+				timeout = 1000;
     wait:
 			if (s < 0 || s >= FD_SETSIZE) {
 				Perror(stderr, "s out-of-bounds", EMFILE);
 				res_close();
 				goto next_ns;
 			}
-			FD_ZERO(&dsmask);
-			FD_SET(s, &dsmask);
-			n = select(s+1, &dsmask, (fd_set *)NULL,
-				   (fd_set *)NULL, &timeout);
+			pfd[0].fd = s;
+			pfd[0].events = POLLIN;
+			n = __poll(pfd, 1, timeout);
 			if (n < 0) {
 				if (errno == EINTR)
 					goto wait;
-				Perror(stderr, "select", errno);
+				Perror(stderr, "poll", errno);
 				res_close();
 				goto next_ns;
 			}