An SNTP client daemon for machines without a sane system time
doc | ||
init.d | ||
.gitignore | ||
AUTHORS | ||
ChangeLog | ||
configure.ac | ||
COPYING | ||
INSTALL | ||
Makefile.am | ||
NEWS | ||
README | ||
THANKS | ||
vsntp.c |
vsntp README See INSTALL for details on how to install and run vsntp. Obtaining the Newest Information vsntp's official website is at... vsntp project on GitHub: https://github.com/imacat/vsntp vsntp project on SourceForge: https://sf.net/p/vsntp You can always download the newest version of vsntp from... vsntp download on SourceForge: https://sourceforge.net/projects/vsntp/files Tavern IMACAT's FTP directory: https://ftp.imacat.idv.tw/pub/vsntp/ imacat's PGP public key is at... Tavern IMACAT's: https://www.imacat.idv.tw/me/pgpkey.asc Introduction: vsntp is an SNTP client daemon for machines without a sane system time. The word "vsntp" stands for "SNTP for Virtual PC". It was originally designed for my GNU/Linux server running on Connectix Virtual PC. It runs according to RFC 1769 SNTP, connecting the NTP server on UDP port 123. Without Virtual PC Additions, the system time on Virtual PC is completely insane. It's RTC (Real Time Clock, or CMOS time, or hardware clock) is software emulated, which does not seems to be running. The GNU/Linux kernel hardly maintains a system time itself. With smooth run it goes 4 seconds ahead per minute, which is nearly 1.5 hours per day. That is insane. You can even tell it with your eyes. David L. Mills' ntp does not work here. It uses a method that learns the clock frequency drift first, and adjust the kernel clock with adjtimex() so that time adjustment goes smoothly, from the point of view of system and applications. This assumes an existing fix- speed system clock. But this is not the case of Virtual PC. The system clock on Virtual PC is software emulated. It can be faster or slower now and then, depending on the load of the hosting machine. There is no fixed clock speed. The frequency drift does not exist, then. It dooms to fail to measure it. There is an sntp client that comes with David L. Mills' ntp package. It is suggested to be run from crontab. But crontab runs by minutes, and Virtual PC goes 4 seconds ahead per minute. Rolling back 4 seconds every minute is insane for most applications. It also increases system load heavily to run one instance per minute. vsntp is a workaround on this. It runs as a daemon to eliminates the additional system load on every synchronization. It uses settimeofday() to synchronize the time. It synchronizes the time with an arbitrary interval, so that time can be accurate within a second. There are some defects. Synchronizing the time too often introduces heavy network load. It introduces heavy load on the target NTP server, too. You should have a working NTP server nearby that is owned by you. Also, since settimeofday() is called so often, high-accurate time operations like timer, etc., may not run correctly. vsntp uses sleep() as the synchronization scheduler. Reports show that on some systems sleep() may not function normally. If you find vsntp stops synchronization after running for some time, that the sleep() is not functioning normally on your system, you may want to switch to the alarm() scheduler with the "-a" switch. If you ever encounter any problem, you may check your syslog. vsntp logs detailed debugging information to syslog in log level LOG_DEBUG with facility LOG_DAEMON. You may turn it on in your /etc/syslog.conf with the following line: daemon.debug /var/log/debug and check the /var/log/debug file for the debugging message. Remember to remove this afterwards, for the amount of the debugging messages may be huge and may use up your hard disk in a very short time. To the least it may slow down your system for frequent hard disk I/O. vsntp was originally written for GNU/Linux. It uses POSIX compatible system calls. It should work on any POSIX compatible system. But I have yet only tested it on Cygwin. Cygwin is known to work. I don't have others to test and run on. Please let me know (and submit the patch if needed) if you can port it to other systems. I know it does not work on MSWin32, for the way it handles the PID file path. Please tell me if you have successfully running vsntp on other virtual machines, like VMWare. Generally, please tell me if you are using vsntp. I would like to know that I am really doing some good for the world, *^_^* but not having fun myself. :p This is my first daemon, my first socket program and my first public-released C program. Any comment or suggestion is welcome. ^_*'