s6-networking
Software
skarnet.org
 The s6-taiclock program 
s6-taiclock is a client for the
TAICLOCK protocol.
It connects to a TAICLOCK server, computes an estimated discrepancy
between the local clock time and the absolute time given by the server,
and outputs it on stdout.
 Interface 
     s6-taiclock [ -f ] [ -v verbosity ] [ -r roundtrips ] [ -t triptimeout ] [ -h throttle ] [ -T totaltimeout ] [ -e errmax ] [ -p port ] ipaddress | s6-clockview
 -  s6-taiclock exchanges TAICLOCK messages with a server such as
s6-taiclockd
listening on ipaddress, UDP port 4014.
ipaddress can be IPv4 or IPv6. 
-  It computes the mean difference between the absolute time
given by the system clock and the one given by the server. 
-  It prints the difference to stdout in a format understood
by s6-clockadd and
s6-clockview. It then exits 0. 
 Options 
 -  -f : force. Normally, s6-taiclock exits 111 if it cannot
compute a time with a smaller uncertainty than errmax. If this
option is set, it will output a time difference and exit 0 even if the
error is too big. 
-  -v verbosity : be more or less verbose.
By default, verbosity is 1. 0 means only print fatal error
messages; 2 means print advanced warnings. 
-  -r roundtrips : perform roundtrips
exchanges with the server. By default, roundtrips is 10. A lower
value yields a higher time uncertainty; a higher value puts more load on
the server. 
-  -t triptimeout : if a TAICLOCK exchange with
the server takes more than triptimeout milliseconds, abort this
exchange and move on to the next one. By default, triptimeout
is 2000. 
-  -h throttle : wait throttle
milliseconds between exchanges with the server. A lower value gets the
final result earlier, but exerts more load on the server. A higher
value puts a lighter load on the server, but delays the computation.
By default, throttle is 0. It is recommended to set it to a
reasonable nonzero value when increasing roundtrips. 
-  -T totaltimeout : if the whole
operation takes more than totaltimeout milliseconds, abort
and exit 1. By default, totaltimeout is 10000. 
-  -e errmax : accept a maximum time
uncertainty of errmax milliseconds. By default, errmax
is 100. 
-  -p port : contact a server on port
port. By default, port is 4014. 
 Notes 
 On the usage of NTP vs. TAICLOCK 
 -  TAICLOCK is not as generic or failproof as NTP. It is not as
resistant to network latency. It has been designed to broadcast
time on a local area network, whereas NTP has been designed to
broadcast time over the whole Internet. 
-  TAICLOCK will produce faster results on a LAN; moreover, the
point of TAICLOCK is to broadcast TAI instead of UTC, so it is
more accurate around a leap second. 
-  The Internet is much more reliable latency-wise today
than it was when dialout connections and broken routing protocols
were the norm. So it is possible to use TAICLOCK
across a WAN if the accuracy expectations are not too strict. 
-  TAICLOCK is much easier to implement. The
s6-sntpclock client binary code
(statically linked on a i386) is 50% bigger than the s6-taiclock
client. Also, the s6-taiclockd
server is extremely small (close to 50% smaller than the client),
whereas NTP servers, even SNTP servers, are behemoths requiring
a project of their own. 
 Related work 
 -  The clockspeed package
is the original inspiration for the clock management part of s6-networking.
Unfortunately, it is unmaintained.