OSDN Git Service

(split) LDP: Update original to LDP v3.51.
[linuxjm/LDP_man-pages.git] / original / man3 / rtime.3
1 .\" Copyright 2003 walter harms (walter.harms@informatik.uni-oldenburg.de)
2 .\"
3 .\" %%%LICENSE_START(GPL_NOVERSION_ONELINE)
4 .\" Distributed under GPL
5 .\" %%%LICENSE_END
6 .\"
7 .\" Modified 2003-04-04 Walter Harms
8 .\" <walter.harms@informatik.uni-oldenburg.de>
9 .\"
10 .\" Slightly polished, aeb, 2003-04-06
11 .\"
12 .TH RTIME 3 2012-08-03 "GNU" "Linux Programmer's Manual"
13 .SH NAME
14 rtime \- get time from a remote machine
15 .SH SYNOPSIS
16 .nf
17 .B "#include <rpc/des_crypt.h>"
18 .sp
19 .BI "int rtime(struct sockaddr_in *" addrp ", struct rpc_timeval *" timep ,
20 .BI "          struct rpc_timeval *" timeout );
21 .fi
22 .SH DESCRIPTION
23 This function uses the Time Server Protocol as described in
24 RFC\ 868 to obtain the time from a remote machine.
25 .LP
26 The Time Server Protocol gives the time in seconds since
27 00:00:00 UTC, 1 Jan 1900,
28 and this function subtracts the appropriate constant in order to
29 convert the result to seconds since the
30 Epoch, 1970-01-01 00:00:00 +0000 (UTC).
31 .LP
32 When
33 .I timeout
34 is non-NULL, the udp/time socket (port 37) is used.
35 Otherwise, the tcp/time socket (port 37) is used.
36 .SH RETURN VALUE
37 On success, 0 is returned, and the obtained 32-bit time value is stored in
38 .IR timep\->tv_sec .
39 In case of error \-1 is returned, and
40 .I errno
41 is set appropriately.
42 .SH ERRORS
43 All errors for underlying functions
44 .RB ( sendto (2),
45 .BR poll (2),
46 .BR recvfrom (2),
47 .BR connect (2),
48 .BR read (2))
49 can occur.
50 Moreover:
51 .TP
52 .B EIO
53 The number of returned bytes is not 4.
54 .TP
55 .B ETIMEDOUT
56 The waiting time as defined in timeout has expired.
57 .SH NOTES
58 Only IPv4 is supported.
59 .LP
60 Some
61 .I in.timed
62 versions support only TCP.
63 Try the example program with
64 .I use_tcp
65 set to 1.
66 .LP
67 Libc5 uses the prototype
68 .br
69 int rtime(struct sockaddr_in *, struct timeval *, struct timeval *);
70 .br
71 and requires
72 .I <sys/time.h>
73 instead of
74 .IR <rpc/auth_des.h> .
75 .SH BUGS
76 .BR rtime ()
77 in glibc 2.2.5 and earlier does not work properly on 64-bit machines.
78 .SH EXAMPLE
79 This example requires that port 37 is up and open.
80 You may check
81 that the time entry within
82 .I /etc/inetd.conf
83 is not commented out.
84 .br
85 The program connects to a computer called "linux".
86 Using "localhost" does not work.
87 The result is the localtime of the computer "linux".
88 .sp
89 .nf
90 #include <stdio.h>
91 #include <stdlib.h>
92 #include <errno.h>
93 #include <string.h>
94 #include <time.h>
95 #include <rpc/auth_des.h>
96 #include <netdb.h>
97
98 int use_tcp = 0;
99 char *servername = "linux";
100
101 int
102 main(void)
103 {
104     struct sockaddr_in name;
105     struct rpc_timeval time1 = {0,0};
106     struct rpc_timeval timeout = {1,0};
107     struct hostent *hent;
108     int ret;
109
110     memset(&name, 0, sizeof(name));
111     sethostent(1);
112     hent = gethostbyname(servername);
113     memcpy(&name.sin_addr, hent\->h_addr, hent\->h_length);
114
115     ret = rtime(&name, &time1, use_tcp ? NULL : &timeout);
116     if (ret < 0)
117         perror("rtime error");
118     else {
119         time_t t = time1.tv_sec;
120         printf("%s\\n", ctime(&t));
121     }
122
123     exit(EXIT_SUCCESS);
124 }
125 .fi
126 .SH SEE ALSO
127 .\" .BR netdate (1),
128 .BR ntpdate (1),
129 .\" .BR rdate (1),
130 .BR inetd (8)