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.

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.

-r roundtrips : perform roundtrips
exchanges with the server. By default, roundtrip 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.