I can really recommend implementing (and testing) Paxos (and the failure detector Omega mentioned at the end of the linked page) if you're interested in learning distributed systems, message passing-based communication and juggling state machines.
It may look tricky, but once you penetrate the formalities and understand it, you'll love it. It's a nice kick when you get it working.
Edit: Although you may not want to do it in C, as I had to. At the time, I'd have given my left hand for some tuples, pattern matching and other stuff. :)
Funny you mention this -- this was almost exactly what I and a friend did for a final project last semester. we did it in Go, which was probably much more enjoyable than C :)
It may look tricky, but once you penetrate the formalities and understand it, you'll love it. It's a nice kick when you get it working.
Edit: Although you may not want to do it in C, as I had to. At the time, I'd have given my left hand for some tuples, pattern matching and other stuff. :)