(clnt_broadcast): Likewise.
authordrepper <drepper>
Sun, 28 Jun 1998 09:49:09 +0000 (09:49 +0000)
committerdrepper <drepper>
Sun, 28 Jun 1998 09:49:09 +0000 (09:49 +0000)
sunrpc/pmap_rmt.c

index ec0b84e..b3c8fcb 100644 (file)
@@ -45,6 +45,7 @@ static char sccsid[] = "@(#)pmap_rmt.c 1.21 87/08/27 Copyr 1984 Sun Micro";
 #include <rpc/pmap_prot.h>
 #include <rpc/pmap_clnt.h>
 #include <rpc/pmap_rmt.h>
+#include <sys/poll.h>
 #include <sys/socket.h>
 #include <stdio.h>
 #include <errno.h>
@@ -240,13 +241,8 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
   socklen_t fromlen;
   int sock;
   int on = 1;
-#ifdef FD_SETSIZE
-  fd_set mask;
-  fd_set readfds;
-#else
-  int readfds;
-  int mask;
-#endif /* def FD_SETSIZE */
+  struct pollfd fd;
+  int milliseconds;
   int i;
   bool_t done = FALSE;
   u_long xid;
@@ -256,7 +252,7 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
   struct rmtcallargs a;
   struct rmtcallres r;
   struct rpc_msg msg;
-  struct timeval t, t1;
+  struct timeval t;
   char outbuf[MAX_BROADCAST_SIZE], inbuf[UDPMSGSIZE];
 
   /*
@@ -277,12 +273,8 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
       goto done_broad;
     }
 #endif /* def SO_BROADCAST */
-#ifdef FD_SETSIZE
-  FD_ZERO (&mask);
-  FD_SET (sock, &mask);
-#else
-  mask = (1 << sock);
-#endif /* def FD_SETSIZE */
+  fd.fd = sock;
+  fd.events = POLLIN;
   nets = getbroadcastnets (addrs, sock, inbuf);
   bzero ((char *) &baddr, sizeof (baddr));
   baddr.sin_family = AF_INET;
@@ -342,10 +334,8 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
       msg.acpted_rply.ar_verf = _null_auth;
       msg.acpted_rply.ar_results.where = (caddr_t) & r;
       msg.acpted_rply.ar_results.proc = (xdrproc_t) xdr_rmtcallres;
-      readfds = mask;
-      t1 = t;
-      switch (select (_rpc_dtablesize (), &readfds, (fd_set *) NULL,
-                     (fd_set *) NULL, &t1))
+      milliseconds = t.tv_sec * 1000 + t.tv_usec / 1000;
+      switch (__poll(&fd, 1, milliseconds))
        {
 
        case 0:         /* timed out */
@@ -355,11 +345,11 @@ clnt_broadcast (prog, vers, proc, xargs, argsp, xresults, resultsp, eachresult)
        case -1:                /* some kind of error */
          if (errno == EINTR)
            goto recv_again;
-         perror (_("Broadcast select problem"));
+         perror (_("Broadcast poll problem"));
          stat = RPC_CANTRECV;
          goto done_broad;
 
-       }                       /* end of select results switch */
+       }                       /* end of poll results switch */
     try_again:
       fromlen = sizeof (struct sockaddr);
       inlen = recvfrom (sock, inbuf, UDPMSGSIZE, 0,