diff --git a/networking/udhcp/arpping.c b/networking/udhcp/arpping.c index da01ddd71..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; - prevTime = time(NULL); + 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; - prevTime = time(NULL); + 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 6ca7371d5..bf2ac4417 100644 --- a/networking/udhcp/common.c +++ b/networking/udhcp/common.c @@ -37,6 +37,14 @@ static int daemonized; +long uptime(void) +{ + struct sysinfo info; + sysinfo(&info); + return info.uptime; +} + + /* * This function makes sure our first socket calls * aren't going to fd 1 (printf badness...) and are 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 028338ff3..8009bec04 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c @@ -310,7 +310,7 @@ int main(int argc, char *argv[]) for (;;) { - tv.tv_sec = timeout - time(NULL); + tv.tv_sec = timeout - uptime(); tv.tv_usec = 0; if (listen_mode != LISTEN_NONE && fd < 0) { @@ -330,7 +330,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(NULL); + now = uptime(); if (retval == 0) { /* timeout dropped to zero */ switch (state) {