I assume that the RioReceiver has a builtin clock, and that gettimeofday() works, right?

Unfortunately it does not have a built in clock. For the "default" behaviour of the Rio there's just no need for a clock. You can run an NTP client on it to keep it in sync though. I've tried this with the ntpdate program found in the ntp package at http://www.eecis.udel.edu/~ntp/.

The other option is that when I get the Web interface implemented, you could write a server side script that would just send a "play" request to the Rio at the correct time. This would prevent the need for the Rio to keep track of the time and would also eliminate the need to add special alarm clock code to the player.