When I started Monkey HTTP Daemon, it was with the idea of a small web server with self-educational objetives. One of the early versions used the forking model (fork the current process in order to attend the client), then I moved the code to use pthreads, was the same ideas as fork but creating a thread for every client, this last change gave monkey the capacity to attend more clients in the same time than the fork model. Finally the last week, I moved the development repo code in order to use the epoll implementation as cool and good modern webserves as Lighttpd or Cherokee does.
Using epoll(7) is possible to watch file descriptors and know when they are ready to read or write, it has a similar behavior to select, poll and kqueue but works a little faster, it just works under a Linux platform, so from now if someone wants to compile monkey on another platform, will going to need to rewrite some parts. At the moment I'm not interested in make it portable for different platforms. I just want a really small and fast web server just for Linux.
The development version works but is a little bugy , I don't recommend it for production, just for testing and have fun 🙂