BBB RTC synchronization with NTP

Current Beaglebone Black images offer support for high resolution timers in Linux kernel. They are controlled by ktime.h library and depend on system’s clocks (CLOCK_MONOTONIC, CLOCK_REALTIME,…). The clocks can be looked up from userspace programs with commands clock_gettime, clock_settime and clock_getres from time.h library.
What I would like to do is make/write a protocol in c that would synchronize realtime clocks between two boards over ethernet cable connection or internet. My goal is testing how accurately two clocks can be set to the same global time under different protocols. I’m planning to start with ntp, would using an existing library or client make sense here? I read BBB sometimes comes with daemons for ntp, in that case how would I set one board to act as a server in protocol?

Look at gPTP.

debian@beaglebone:~$ apt search ntpd
Sorting... Done
Full Text Search... Done
  <SNIP NNTP related items>
ntpdate/stable 1:4.2.8p12+dfsg-4 armhf
  client for setting system time from NTP servers (deprecated)

ntpsec-ntpdate/stable 1.1.3+dfsg1-2+deb10u1 armhf
  client for setting system time from NTP servers

openntpd/stable 1:6.2p3-4 armhf
  OpenBSD NTP daemon

debian@beaglebone:~$man openntpd #after installing it
"""
DESCRIPTION
     The ntpd daemon synchronizes the local clock to one or more remote NTP
servers or local
     timedelta sensors. ntpd can also act as an NTP server itself,
redistributing the local
     time. It implements the Simple Network Time Protocol version 4, as
described in RFC
     5905, and the Network Time Protocol version 3, as described in RFC
1305.
"""

debian@beaglebone:~$ man ntpd.conf
"""
DESCRIPTION
     This manual page describes the format of the ntpd(8) configuration
file.

     ntpd.conf has the following format:

     Empty lines and lines beginning with the ‘#’ character are ignored.

     Keywords may be specified multiple times within the configuration
file. The basic con-
     figuration options are as follows:

     listen on address [rtable table-id]
             ntpd(8) has the ability to sync the local clock to remote NTP
servers and, if
             this directive is specified, can act as NTP server itself,
redistributing the
             local clock.

             Specify a local IP address or a hostname the ntpd(8) daemon
should listen on to
             enable remote clients synchronization. If it appears multiple
times, ntpd(8)
             will listen on each given address. If ‘*’ is given as an
address, ntpd(8) will
             listen on all local addresses using the specified routing
table. ntpd(8) does
             not listen on any address by default. The optional rtable
keyword will specify
             which routing table to listen on, if the operating system
supports rdomains. By
             default ntpd(8) will listen using the current routing table.
For example:
"""

Note that the Beaglebone Debian images use a small systemd service called systemd-timesyncd to set the system RTC. This service queries current time via SNTP (on boot, and periodically while the system is running) and updates /dev/rtc0 with the received time. Perhaps you can get started with that simple, out-of-box feature?

https://wiki.archlinux.org/index.php/systemd-timesyncd

https://www.freedesktop.org/software/systemd/man/systemd-timesyncd.service.html