For this http server, main loop looks something like:
// set up listen socket
int listenSocket = ...
// Install signal handler(s) to clear the running flag
struct pollfd *pollData = ... // add listenSocket to poll
while (running) {
int pollResult = poll(...)
switch (pollResult) {
case -1:
// Handle poll error, probably by falling out the loop
case 0:
// Poll timeout, continue the loop
// (going this to give signals a chance to gracefully shut down)
continue;
}
// this is where i got bored/ran out of energy
}
// Tidy up
// close listen socket
// close client sockets