https://github.com/sysprog21/sehttpd
A small and efficient web server with 1K lines of C code
https://github.com/sysprog21/sehttpd
asynchronous-programming ebpf epoll http linux nonblocking web-server
Last synced: about 1 month ago
JSON representation
A small and efficient web server with 1K lines of C code
- Host: GitHub
- URL: https://github.com/sysprog21/sehttpd
- Owner: sysprog21
- License: mit
- Created: 2020-04-05T15:18:46.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-11-10T16:45:13.000Z (over 2 years ago)
- Last Synced: 2025-05-08T23:54:04.464Z (about 1 month ago)
- Topics: asynchronous-programming, ebpf, epoll, http, linux, nonblocking, web-server
- Language: C
- Size: 45.9 KB
- Stars: 87
- Watchers: 6
- Forks: 75
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# seHTTPd
`seHTTPd` implements a small and efficient web server with 1K lines of C code.
I/O multiplexing is achieved using [epoll](http://man7.org/linux/man-pages/man7/epoll.7.html).## Features
* Single-threaded, non-blocking I/O based on event-driven model
* HTTP persistent connection (HTTP Keep-Alive)
* A timer for executing the handler after having waited the specified time## High-level Design
```text
+----------------------------------------------+
| |
| +-----------+ wait +-----------------+ | copy +---------+
| | +----------> +------------> |
| | IO Device | 1 | Kernel's buffer | | 2 | Process |
| | <----------+ <------------+ |
| +-----------+ +-----------------+ | +---------+
| |
+----------------------------------------------+
```## Build from Source
At the moment, `seHTTPd` supports Linux based systems with epoll system call.
Building `seHTTPd` is straightforward.
```shell
$ make
```### Default server
```shell
./sehttpd
```### Specify the port
```shell
./sehttpd -p 8082
```Specify the port number with `-p` flag, by default the server accepts connections on port 8081.
### Specify the web root
```shell
./sehttpd -w ./www
```Specify the web root with `-w` flag, by default the web root is "./www".
## License
`seHTTPd` is released under the MIT License. Use of this source code is governed
by a MIT License that can be found in the LICENSE file.