/basic-http-server

An incomplete static http server for practice

Primary LanguageC

About

Trying to learn C by doing. This is an attempt on a very basic http server that serves static files out of a directory.

  • Uses non-blocking io sockets and edge-triggered polling with epoll.

Usage

docker build -t c-program .

docker run \
-it \
--name c-program-dev \
-v "$(pwd)"/src:/usr/src/app/src \
-v "$(pwd)"/website:/usr/src/app/website \
-p 80:80 \
c-program bash

# For subsequent runs
docker start -i c-program-dev

make

./bin/startServer --port=8080 --dir=./website

Todos

  1. Parse header up to /r/n/r/n point and extract target uri and get static file location

  2. Create struct to store connection data and set its pointer to epoll_event data *ptr

  • source file descriptor
  • *method
  • *uri
  • *header_field
    • key (strdup)
    • value (strdup)
  • header_size
  • *number of bytes sent
  1. Use sendfile to send data to client. Close connection once complete. If error EGAIN - continue, if zero means EOF

References

MacOS syscalls