diff options
-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 a5699ebf4..cb180247e 100644 --- a/util-linux/rdate.c +++ b/util-linux/rdate.c | |||
@@ -32,11 +32,17 @@ | |||
32 | #include <time.h> | 32 | #include <time.h> |
33 | #include <stdlib.h> | 33 | #include <stdlib.h> |
34 | #include <unistd.h> | 34 | #include <unistd.h> |
35 | #include <signal.h> | ||
35 | #include "busybox.h" | 36 | #include "busybox.h" |
36 | 37 | ||
37 | 38 | ||
38 | static const int RFC_868_BIAS = 2208988800UL; | 39 | static const int RFC_868_BIAS = 2208988800UL; |
39 | 40 | ||
41 | static void socket_timeout() | ||
42 | { | ||
43 | bb_error_msg_and_die("timeout connecting to time server\n"); | ||
44 | } | ||
45 | |||
40 | static time_t askremotedate(const char *host) | 46 | static time_t askremotedate(const char *host) |
41 | { | 47 | { |
42 | unsigned long int nett, localt; | 48 | unsigned long int nett, localt; |
@@ -46,6 +52,10 @@ static time_t askremotedate(const char *host) | |||
46 | if (getservbyname("time", "tcp") != NULL) | 52 | if (getservbyname("time", "tcp") != NULL) |
47 | port="time"; | 53 | port="time"; |
48 | 54 | ||
55 | /* Add a timeout for dead or non accessable servers */ | ||
56 | alarm(10); | ||
57 | signal(SIGALRM, socket_timeout); | ||
58 | |||
49 | fd = xconnect(host, port); | 59 | fd = xconnect(host, port); |
50 | 60 | ||
51 | if (safe_read(fd, (void *)&nett, 4) != 4) /* read time from server */ | 61 | if (safe_read(fd, (void *)&nett, 4) != 4) /* read time from server */ |