An open API service indexing awesome lists of open source software.

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

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.