summaryrefslogtreecommitdiff
path: root/man3/rtime.3
diff options
context:
space:
mode:
Diffstat (limited to 'man3/rtime.3')
-rw-r--r--man3/rtime.3112
1 files changed, 112 insertions, 0 deletions
diff --git a/man3/rtime.3 b/man3/rtime.3
new file mode 100644
index 000000000..e78695a9a
--- /dev/null
+++ b/man3/rtime.3
@@ -0,0 +1,112 @@
+.\" Copyright 2003 walter harms (walter.harms@informatik.uni-oldenburg.de)
+.\" Distributed under GPL
+.\" Modified 2003-04-04 Walter Harms
+.\" <walter.harms@informatik.uni-oldenburg.de>
+.\"
+.\" Slightly polished, aeb, 2003-04-06
+.\"
+.TH RTIME 3 2003-04-04 "sunrpc" "RPC time function"
+.SH NAME
+rtime \- get time from a remote machine
+.SH SYNOPSIS
+.sp
+.B "#include <rpc/des_crypt.h>"
+.sp
+.BI "int rtime(struct sockaddr_in *" addrp ,
+.BI "struct rpc_timeval *" timep ,
+.BI "struct rpc_timeval *" timeout );
+.sp
+.SH DESCRIPTION
+This function uses the Time Server Protocol as described in
+RFC 868 to obtain the time from a remote machine.
+.LP
+The Time Server Protocol gives the time in seconds since midnight 1900-01-01,
+and this function subtracts the appropriate constant in order to
+convert the result to seconds since midnight 1970-01-01, the Unix epoch.
+.LP
+When
+.I timeout
+is non-NULL, the udp/time socket (port 37) is used.
+Otherwise, the tcp/time socket (port 37) is used.
+.SH "RETURN VALUE"
+On success, 0 is returned, and the obtained 32-bit time value is stored in
+.IR timep->tv_sec .
+In case of error -1 is returned, and
+.I errno
+is set appropriately.
+.SH ERRORS
+All errors for underlying functions (sendto, poll, recvfrom, connect, read)
+can occur. Moreover:
+.TP
+.B EIO
+The number of returned bytes is not 4.
+.TP
+.B ETIMEDOUT
+The waiting time as defined in timeout has expired.
+.SH "EXAMPLE"
+This example requires that port 37 is up and open. You may check
+that the time entry within
+.I /etc/inetd.conf
+is not commented out.
+.br
+The program connects to a computer called 'linux'.
+Using 'localhost' does not work.
+The result is the localtime of the computer 'linux'.
+.sp
+.nf
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <time.h>
+#include <rpc/auth_des.h>
+#include <netdb.h>
+
+int use_tcp = 0;
+char *servername = "linux";
+
+int main() {
+ struct sockaddr_in name;
+ struct rpc_timeval time1 = {0,0};
+ struct rpc_timeval timeout = {1,0};
+ struct hostent *hent;
+ int ret;
+
+ memset((char *)&name, 0, sizeof(name));
+ sethostent(1);
+ hent = gethostbyname(servername);
+ memcpy((char *)&name.sin_addr, hent->h_addr, hent->h_length);
+
+ ret = rtime(&name, &time1, use_tcp ? NULL : &timeout);
+ if (ret < 0)
+ perror("rtime error");
+ else
+ printf("%s", ctime((time_t *)&time1.tv_sec));
+
+ return 0;
+}
+.fi
+.SH "NOTES"
+Only IPV4 is supported.
+.LP
+Some
+.I in.timed
+versions only support TCP. Try the above example program with
+.I use_tcp
+set to 1.
+.LP
+Libc5 uses the prototype
+.br
+int rtime(struct sockaddr_in *, struct timeval *, struct timeval *);
+.br
+and requires
+.I <sys/time.h>
+instead of
+.IR <rpc/auth_des.h> .
+
+.SH "BUGS"
+rtime() in glibc <= 2.2.5 does not work properly on 64bit machines.
+.SH "SEE ALSO"
+.BR netdate (1),
+.BR ntpdate (1),
+.BR rdate (1),
+.BR inetd (8)