Update.
authorUlrich Drepper <drepper@redhat.com>
Sat, 27 Jun 1998 13:29:37 +0000 (13:29 +0000)
committerUlrich Drepper <drepper@redhat.com>
Sat, 27 Jun 1998 13:29:37 +0000 (13:29 +0000)
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.

ChangeLog
inet/rcmd.c
resolv/res_send.c

index de5184b..b03648f 100644 (file)
--- 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.
index d76eff8..e54d894 100644 (file)
@@ -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;
                }
index e5c6e03..38e1e05 100644 (file)
@@ -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;
                        }