wake is a wake on LAN program for UNIX-like systems that I started a few years ago. I used it for a while, then it sat around for a bit until I recently decided to dust it off, fix it up, and share it with the world. It demonstrates some of the methods necessary in UNIX network programming, particularly those required when looking up and gathering information on network interfaces.
It currently works only on IPv4 networks, but I hope to rectify this in the not-too-distant future when I can set up an IPv6 LAN in order to experiment with multicast and other methods.
wake also includes some code, in list.h and list.c, that I originally intended to include in a more general library of C routines. I never really completed that collection, and it isn't really necessary any longer given all of the great, free software libraries and frameworks that are available on the Internet. Rather than rewrite wake to use one of those, I just included the files and routines needed by wake in its src directory. There may actually be more code in list.c than actually used by wake, but it is a fairly complete implementation of a doubly-linked list if you need one.
The README explains its operation in some detail.
The wake source code is currently available on github.
You can also download distribution tarballs of the versioned releases here.
wake is distributed under the terms of the GNU General Public License version 3, or later.