mirror of https://github.com/mkerrisk/man-pages
123 lines
2.9 KiB
Groff
123 lines
2.9 KiB
Groff
.\" 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 "" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
rtime \- get time from a remote machine
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B "#include <rpc/des_crypt.h>"
|
|
.sp
|
|
.BI "int rtime(struct sockaddr_in *" addrp ", struct rpc_timeval *" timep ,
|
|
.BI " struct rpc_timeval *" timeout );
|
|
.fi
|
|
.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
|
|
.RB ( sendto (2),
|
|
.BR poll (2),
|
|
.BR recvfrom (2),
|
|
.BR connect (2),
|
|
.BR read (2))
|
|
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 "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"
|
|
.BR rtime ()
|
|
in glibc <= 2.2.5 does not work properly on 64-bit machines.
|
|
.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 <stdlib.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(void)
|
|
{
|
|
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\\n", ctime((time_t *) &time1.tv_sec));
|
|
|
|
exit(EXIT_SUCCESS);
|
|
}
|
|
.fi
|
|
.SH "SEE ALSO"
|
|
.BR netdate (1),
|
|
.BR ntpdate (1),
|
|
.BR rdate (1),
|
|
.BR inetd (8)
|