fix timewarp in client (server fix later)
No binary (build failed)
—
(log yok)
| @@ -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"); | |
| @@ -29,6 +29,7 @@ | |
| #include <signal.h> | |
| #include <paths.h> | |
| #include <sys/socket.h> | |
| + | #include <sys/sysinfo.h> |
| #include <stdarg.h> | |
| #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 | |
| @@ -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); | |
| @@ -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) { | |