diff --git a/networking/udhcp/arpping.c b/networking/udhcp/arpping.c index ab4c6d20c..7cc2be42e 100644 --- a/networking/udhcp/arpping.c +++ b/networking/udhcp/arpping.c @@ -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"); diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c index 4f856ee6c..ce76c516d 100644 --- a/networking/udhcp/common.c +++ b/networking/udhcp/common.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include "common.h" @@ -37,6 +38,14 @@ 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 diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h index cdc51cf8a..ca19a2497 100644 --- a/networking/udhcp/common.h +++ b/networking/udhcp/common.h @@ -39,6 +39,7 @@ enum syslog_levels { #include #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); diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index dda678933..449b51763 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c @@ -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) {