mhttpd - Micro HTTP Server
Introduction
Table of Contents
Infrastructure
           requests             dispatch
listener -----------> workers ------------> epoll_wait
           eventfd
main thread
start server and start event loop for signal
server_startup(&server);
{ // signal handling
    sigemptyset(&sigset);
    sigaddset(&sigset, SIGINT);
    sigfillset(&sigset);
    do {
        int signo = sigwaitinfo(&sigset, &siginfo);
        if (signo == -1) {
            if (errno == EAGAIN || errno == EINTR) {
                continue;
            }
            break;
        }
        mlog_info("[%s] signal: %s", __func__, strsignal(siginfo.si_signo));
        if (siginfo.si_signo == SIGINT) {
            mlog_info("[%s] quitting", __func__);
            break;
        }
    } while (1);
}
server_shutdown(&server);
Benchmark
ab - Apache HTTP server benchmarking tool
Syntax
ab [ -A auth-username:password ] [ -b windowsize ] [ -B local-address ]
 [ -c concurrency ] [ -C cookie-name=value ] [ -d ] [ -e csv-file ]
 [ -f protocol ] [ -g gnuplot-file ] [ -h ] [ -H custom-header ]
 [ -i ] [ -k ] [ -n requests ] [ -p POST-file ] [ -P proxy-auth-username:password ]
 [ -q ] [ -r ] [ -s timeout ] [ -S ] [ -t timelimit ] [ -T content-type ]
 [ -u PUT-file ]  [  -v verbosity] [ -V ] [ -w ] [ -x <table>-attributes ]
 [ -X proxy[:port] ] [ -y <tr>-attributes ] [ -z <td>-attributes ]
 [ -Z ciphersuite ] [http[s]://]hostname[:port]/path
Example
ab -c 1000 -n 10000 http://localhost:8000/