Serves html with html templates over HTTP/1.1.
Stephen Seo
fef2d154ce
All checks were successful
Run Unit Tests / build-and-run-unit-tests (push) Successful in 2m2s
This commit changes the implementationt to store connected clients file-descriptors and to iterate through them all periodically to handle requests and to time-out stale connections. This means that even if one connection is in progress, the program can still handle new connections from other clients. Note this does this not by threads but by taking advantage of non-blocking io to handle each connection. Fixes #8 . |
||
---|---|---|
.forgejo/workflows | ||
example_config | ||
example_static_dir | ||
src | ||
third_party | ||
.gitignore | ||
.gitmodules | ||
CMakeLists.txt | ||
LICENSE | ||
Makefile | ||
README.md |
C Simple HTTP
A simple HTTP/1.1 server written in C.
Usage
Usage:
-p <port> | --port <port>
--config=<config_file>
--disable-peer-addr-print
--req-header-to-print=<header> (can be used multiple times)
For example: --req-header-to-print=User-Agent
Note that this option is case-insensitive
--enable-reload-config-on-change
--enable-cache-dir=<DIR>
--cache-entry-lifetime-seconds=<SECONDS>
--enable-static-dir=<DIR>
Before Compiling
Make sure that the git submodule(s) are loaded:
git submodule update --init --recursive --depth=1 --no-single-branch
Without this, the project will fail to build.
Example
# Build the project.
make c_simple_http
# Alternatively, build with cmake.
cmake -S . -B buildDebug && make -C buildDebug
# Run it with the example config.
# Note that the example config was designed such that it must be referred
# to from its parent directory.
./c_simple_http --config=example_config/example.config --enable-static-dir=example_static_dir
# If built with cmake:
./buildDebug/c_simple_http --config=example_config/example.config --enable-static-dir=example_static_dir
# If port is not specified, the server picks a random port.
# This program should print which TCP port it is listening on.
# Sometimes the program will fail to rebind to the same port due to how TCP
# works. Either wait some time or choose a different port.
# Access the website.
# This assumes the server is hosted on port 3000.
curl localhost:3000
Other Notes
The config file can be reloaded if the program receives the SIGUSR1 signal.
The --enable-reload-config-on-change
option automatically reloads the config
file if the config file has changed.
The --enable-cache-dir=<DIR>
option enables caching and sets the "cache-dir"
at the same time. --cache-entry-lifetime-seconds=<SECONDS>
determines when a
cache entry expires.
The default expiry time of a cache entry is 1 week.