About once a year, usually late in October, a question comes up on POE's mailing list: How does POE react to daylight saving time changes?

Short answers:

POE relies heavily on time() for event and timer dispatching. On most systems, time() reports times that are independent of timezone and summer/winter time changes.

An empirical test on Mac OS X shows time() marches forward when summer time ends, and when the timezone is altered.

  time()     = scalar(localtime)
  1099202397 = Sun Oct 31 01:59:57 2004
  1099202398 = Sun Oct 31 01:59:58 2004
  1099202399 = Sun Oct 31 01:59:59 2004
  (summer time ends)
  1099202400 = Sun Oct 31 01:00:00 2004
  1099202401 = Sun Oct 31 01:00:01 2004
  1099202402 = Sun Oct 31 01:00:02 2004

time() is not affected by timezone changes on OS X.

  1099203675 = Sun Oct 31 01:21:15 2004
  1099203676 = Sun Oct 31 01:21:16 2004
  1099203677 = Sun Oct 31 01:21:17 2004
  (moved east)
  1099203678 = Sun Oct 31 07:21:18 2004
  1099203679 = Sun Oct 31 07:21:19 2004
  1099203680 = Sun Oct 31 07:21:20 2004
  1099203681 = Sun Oct 31 07:21:21 2004
  1099203682 = Sun Oct 31 07:21:22 2004
  (moved back west)
  1099203683 = Sun Oct 31 01:21:23 2004
  1099203684 = Sun Oct 31 01:21:24 2004
  1099203685 = Sun Oct 31 01:21:25 2004

The result of time() will change when a privileged user manually alters the system clock, or when ntpd makes a large step adjustment. It is well known that large time changes disrupt programs, and ntpd is designed to avoid them whenever possible. You can read more about the lengths to which ntpd goes to avoid stepwise time changes in the ntpd(8) man page.

POE trusts time() to be true. Large time changes will have one of two effects, depending on their directions:

Jumps forward may make timers fire prematurely, if time() reports that they are due. One symptom is connection timeouts, even with recent activity.

Jumps backward will make timers late, since time() reports that they are due farther in the future. This will also affect SIGCHLD delivery since child processes are polled with an internal timer.

Finally, there is rumor that some operating systems alter the results of time() when summer/winter times change. You may want to reconsider the use of such a system, if your critical software is hosted on one of them.