Skip to content

cozis/xHTTP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xHTTP

xHTTP is an HTTP server library designed to be lightweight, fast, robust and easy to use.

NOTE: It's still in the early sperimentation phase (I'm still figuring things out!)

Features

xHTTP's more relevant features are:

  • It's fast
  • HTTP/1.1
  • Supports Connection: Keep-Alive
  • Uses sendfile
  • No global state
  • Single-threaded
  • Based on Linux's epoll
  • No dependencies (other than Linux and the standard library)

while some notably missing features are:

  • Only works on Linux
  • Doesn't support Transfer-Encoding: Chunked
  • No IPv6

Installation

The way you install it is by just copying xhttp.c and xhttp.h in your source tree and compiling it like it was one of your C files: include the xhttp.h where you want to use it and compile xhttp.c with your files.

Usage

To start a server instance, you need to call the xhttp function

const char *xhttp(const char *addr, unsigned short port, 
                  xh_callback callback, xh_handle *handle, 
                  const xh_config *config);

by providing it with a callback that generates the HTTP response that the library will forward to the user.

The callback's interface must be

void callback(xh_request *req, xh_response *res, void *userp);

The request information is provided through the req argument, while res is an output argument. The callback will respond to the request by setting the fields of res. These two arguments are never NULL.

Here's an example of a basic server which always responds with a "Hello, world!" message:

#include <stdio.h>
#include "xhttp.h"

static void callback(xh_request *req, xh_response *res, void *userp)
{
    (void) req;
    (void) userp;
    res->status = 200;
    res->body.str = "Hello, world!";
    xh_header_add(res, "Content-Type", "text/plain");
}

int main()
{
    const char *error = xhttp(NULL, 8080, callback, 
                              NULL, NULL, NULL);
    if(error != NULL)
    {
        fprintf(stderr, "ERROR: %s\n", error);
        return 1;
    }
    fprintf(stderr, "OK\n");
    return 0;
}

if this were your main.c file, you'd compile it with

$ gcc main.c xhttp.c -o main

You can find a slightly more complete example in example.c.

Contributing

Feel free to propose any changes or send in patches! Though I'd advise to open an issue before sending any non-trivial changes, just to make sure we're on the same page first!

About

A lightweight HTTP server as a library.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages