s6-networking: the s6-taiclock program
Keywords: s6-networking s6-taiclock tai clock tai64 tai64n tai64na client

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.