fix timewarp in client (server fix later)
authorRuss Dill <Russ.Dill@asu.edu>
Wed, 19 May 2004 08:29:05 +0000 (08:29 -0000)
committerRuss Dill <Russ.Dill@asu.edu>
Wed, 19 May 2004 08:29:05 +0000 (08:29 -0000)
networking/udhcp/arpping.c
networking/udhcp/common.c
networking/udhcp/common.h
networking/udhcp/dhcpc.c

index ab4c6d2..7cc2be4 100644 (file)
@@ -79,7 +79,7 @@ int arpping(uint32_t yiaddr, uint32_t ip, uint8_t *mac, char *interface)
 
        /* wait arp reply, and check it */
        tm.tv_usec = 0;
-       time(&prevTime);
+       prevTime = uptime();
        while (timeout > 0) {
                FD_ZERO(&fdset);
                FD_SET(s, &fdset);
@@ -97,8 +97,8 @@ int arpping(uint32_t yiaddr, uint32_t ip, uint8_t *mac, char *interface)
                                break;
                        }
                }
-               timeout -= time(NULL) - prevTime;
-               time(&prevTime);
+               timeout -= uptime() - prevTime;
+               prevTime = uptime();
        }
        close(s);
        DEBUG(LOG_INFO, "%salid arp replies for this address", rv ? "No v" : "V");      
index 4f856ee..ce76c51 100644 (file)
@@ -29,6 +29,7 @@
 #include <signal.h>
 #include <paths.h>
 #include <sys/socket.h>
+#include <sys/sysinfo.h>
 #include <stdarg.h>
 
 #include "common.h"
 
 static int daemonized;
 
+long uptime(void)
+{
+       struct sysinfo info;
+       sysinfo(&info);
+       printf("uptime %d\n", info.uptime);
+       return info.uptime;
+}
+
 
 /*
  * This function makes sure our first socket calls
index cdc51cf..ca19a24 100644 (file)
@@ -39,6 +39,7 @@ enum syslog_levels {
 #include <syslog.h>
 #endif
 
+long uptime(void);
 void background(const char *pidfile);
 void start_log_and_pid(const char *client_server, const char *pidfile);
 void background(const char *pidfile);
index dda6789..449b517 100644 (file)
@@ -188,7 +188,7 @@ int main(int argc, char *argv[])
        int c, len;
        struct dhcpMessage packet;
        struct in_addr temp_addr;
-       time_t now;
+       long now;
        int max_fd;
        int sig;
 
@@ -290,7 +290,7 @@ int main(int argc, char *argv[])
 
        for (;;) {
 
-               tv.tv_sec = timeout - time(0);
+               tv.tv_sec = timeout - uptime();
                tv.tv_usec = 0;
 
                if (listen_mode != LISTEN_NONE && fd < 0) {
@@ -310,7 +310,7 @@ int main(int argc, char *argv[])
                        retval = select(max_fd + 1, &rfds, NULL, NULL, &tv);
                } else retval = 0; /* If we already timed out, fall through */
 
-               now = time(0);
+               now = uptime();
                if (retval == 0) {
                        /* timeout dropped to zero */
                        switch (state) {