OSDN Git Service

LDP: Update original to LDP v3.79
[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 2014-05-28 "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/auth_des.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 ATTRIBUTES
58 .SS Multithreading (see pthreads(7))
59 The
60 .BR rtime ()
61 function is thread-safe.
62 .SH NOTES
63 Only IPv4 is supported.
64 .LP
65 Some
66 .I in.timed
67 versions support only TCP.
68 Try the example program with
69 .I use_tcp
70 set to 1.
71 .LP
72 Libc5 uses the prototype
73 .nf
74
75     int rtime(struct sockaddr_in *, struct timeval *, struct timeval *);
76
77 .fi
78 and requires
79 .I <sys/time.h>
80 instead of
81 .IR <rpc/auth_des.h> .
82 .SH BUGS
83 .BR rtime ()
84 in glibc 2.2.5 and earlier does not work properly on 64-bit machines.
85 .SH EXAMPLE
86 This example requires that port 37 is up and open.
87 You may check
88 that the time entry within
89 .I /etc/inetd.conf
90 is not commented out.
91
92 The program connects to a computer called "linux".
93 Using "localhost" does not work.
94 The result is the localtime of the computer "linux".
95 .sp
96 .nf
97 #include <stdio.h>
98 #include <stdlib.h>
99 #include <errno.h>
100 #include <string.h>
101 #include <time.h>
102 #include <rpc/auth_des.h>
103 #include <netdb.h>
104
105 static int use_tcp = 0;
106 static char *servername = "linux";
107
108 int
109 main(void)
110 {
111     struct sockaddr_in name;
112     struct rpc_timeval time1 = {0,0};
113     struct rpc_timeval timeout = {1,0};
114     struct hostent *hent;
115     int ret;
116
117     memset(&name, 0, sizeof(name));
118     sethostent(1);
119     hent = gethostbyname(servername);
120     memcpy(&name.sin_addr, hent\->h_addr, hent\->h_length);
121
122     ret = rtime(&name, &time1, use_tcp ? NULL : &timeout);
123     if (ret < 0)
124         perror("rtime error");
125     else {
126         time_t t = time1.tv_sec;
127         printf("%s\\n", ctime(&t));
128     }
129
130     exit(EXIT_SUCCESS);
131 }
132 .fi
133 .SH SEE ALSO
134 .\" .BR netdate (1),
135 .BR ntpdate (1),
136 .\" .BR rdate (1),
137 .BR inetd (8)
138 .SH COLOPHON
139 This page is part of release 3.79 of the Linux
140 .I man-pages
141 project.
142 A description of the project,
143 information about reporting bugs,
144 and the latest version of this page,
145 can be found at
146 \%http://www.kernel.org/doc/man\-pages/.