fix timewarp in client (server fix later)

This commit is contained in:
Russ Dill 2004-05-19 08:29:05 +00:00
parent 91e006c1ad
commit 309c7b71e6
4 changed files with 16 additions and 6 deletions

View 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");

View 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"
@ -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

View 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);

View 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) {