diff options
author | Eric Andersen | 2003-09-12 05:50:51 +0000 |
---|---|---|
committer | Eric Andersen | 2003-09-12 05:50:51 +0000 |
commit | e15138a87024c627d1a0e64b5d25dda1bc634c6a (patch) | |
tree | a005050f04b4a814d31fa745afd518b864fea744 /util-linux | |
parent | f57a614db9db951df798d51351d1c64603ded186 (diff) | |
download | busybox-e15138a87024c627d1a0e64b5d25dda1bc634c6a.zip busybox-e15138a87024c627d1a0e64b5d25dda1bc634c6a.tar.gz |
Teach rdate to timeout in 10 seconds to avoid blocking forever
with odd or broken networking setups
Diffstat (limited to 'util-linux')
-rw-r--r-- | util-linux/rdate.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/util-linux/rdate.c b/util-linux/rdate.c index a5699eb..cb18024 100644 --- a/util-linux/rdate.c +++ b/util-linux/rdate.c @@ -32,11 +32,17 @@ #include <time.h> #include <stdlib.h> #include <unistd.h> +#include <signal.h> #include "busybox.h" static const int RFC_868_BIAS = 2208988800UL; +static void socket_timeout() +{ + bb_error_msg_and_die("timeout connecting to time server\n"); +} + static time_t askremotedate(const char *host) { unsigned long int nett, localt; @@ -46,6 +52,10 @@ static time_t askremotedate(const char *host) if (getservbyname("time", "tcp") != NULL) port="time"; + /* Add a timeout for dead or non accessable servers */ + alarm(10); + signal(SIGALRM, socket_timeout); + fd = xconnect(host, port); if (safe_read(fd, (void *)&nett, 4) != 4) /* read time from server */ |