]> git.cameronkatri.com Git - bsdgames-darwin.git/blobdiff - hunt/huntd/ctl_transact.c
Merge with v20030416.
[bsdgames-darwin.git] / hunt / huntd / ctl_transact.c
index d183bd39fa3629cbe5b76a9803309f7c6709428a..1dd3f29bd6f44c9e86f645ba4cb7199d71b82fa5 100644 (file)
@@ -1,8 +1,33 @@
-/*     $NetBSD: ctl_transact.c,v 1.3 1997/10/20 00:37:16 lukem Exp $   */
+/*     $NetBSD: ctl_transact.c,v 1.6 2003/06/11 12:00:22 wiz Exp $     */
 /*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * Copyright (c) 1983-2003, Regents of the University of California.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions are 
+ * met:
+ * 
+ * + Redistributions of source code must retain the above copyright 
+ *   notice, this list of conditions and the following disclaimer.
+ * + Redistributions in binary form must reproduce the above copyright 
+ *   notice, this list of conditions and the following disclaimer in the 
+ *   documentation and/or other materials provided with the distribution.
+ * + Neither the name of the University of California, San Francisco nor 
+ *   the names of its contributors may be used to endorse or promote 
+ *   products derived from this software without specific prior written 
+ *   permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 #include "bsd.h"
@@ -14,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)ctl_transact.c     5.2 (Berkeley) 3/13/86";
 #else
-__RCSID("$NetBSD: ctl_transact.c,v 1.3 1997/10/20 00:37:16 lukem Exp $");
+__RCSID("$NetBSD: ctl_transact.c,v 1.6 2003/06/11 12:00:22 wiz Exp $");
 #endif
 #endif /* not lint */
 
@@ -28,7 +53,7 @@ __RCSID("$NetBSD: ctl_transact.c,v 1.3 1997/10/20 00:37:16 lukem Exp $");
 
 /*
  * SOCKDGRAM is unreliable, so we must repeat messages if we have
- * not recieved an acknowledgement within a reasonable amount
+ * not received an acknowledgement within a reasonable amount
  * of time
  */
 void
@@ -38,35 +63,31 @@ ctl_transact(target, msg, type, rp)
        int type;
        CTL_RESPONSE *rp;
 {
-       fd_set read_mask, ctl_mask;
+       struct pollfd set[1];
        int nready, cc, retries;
-       struct timeval wait;
 
        nready = 0;
        msg.type = type;
        daemon_addr.sin_addr = target;
        daemon_addr.sin_port = daemon_port;
-       FD_ZERO(&ctl_mask);
-       FD_SET(ctl_sockt, &ctl_mask);
+       set[0].fd = ctl_sockt;
+       set[0].events = POLLIN;
 
        /*
         * Keep sending the message until a response of
         * the proper type is obtained.
         */
        do {
-               wait.tv_sec = CTL_WAIT;
-               wait.tv_usec = 0;
                /* resend message until a response is obtained */
                for (retries = MAX_RETRY; retries > 0; retries -= 1) {
                        cc = sendto(ctl_sockt, (char *)&msg, sizeof (msg), 0,
-                           (struct sockaddr *)&daemon_addr, sizeof (daemon_addr));
+                               &daemon_addr, sizeof (daemon_addr));
                        if (cc != sizeof (msg)) {
                                if (errno == EINTR)
                                        continue;
                                p_error("Error on write to talk daemon");
                        }
-                       read_mask = ctl_mask;
-                       nready = select(32, &read_mask, 0, 0, &wait);
+                       nready = poll(set, 1, CTL_WAIT * 1000);
                        if (nready < 0) {
                                if (errno == EINTR)
                                        continue;
@@ -89,10 +110,8 @@ ctl_transact(target, msg, type, rp)
                                        continue;
                                p_error("Error on read from talk daemon");
                        }
-                       read_mask = ctl_mask;
                        /* an immediate poll */
-                       timerclear(&wait);
-                       nready = select(32, &read_mask, 0, 0, &wait);
+                       nready = poll(set, 1, 0);
                } while (nready > 0 && (
 #ifdef TALK_43
                    rp->vers != TALK_VERSION ||