Update README

This commit is contained in:
2025-07-20 20:30:22 +02:00
parent f7892beb90
commit a19da3ce5f
4 changed files with 14 additions and 9 deletions
+3
View File
@@ -0,0 +1,3 @@
(The following are thoughts that came to mind that I didn't have the time to add to docs but don't want to forget.)
The immediate mode API allows writing directly to the library's output buffer avoiding intermediate allocations
+6 -4
View File
@@ -1,13 +1,15 @@
# chttp # cHTTP
chttp is an HTTP client & server library for C. This is an HTTP client and server library for C.
# Use Cases
cHTTP is perfect for tooling or production environments of limited scale (up to about 1000 concurrent connections). To scale it further, users can take cHTTP's I/O independant HTTP state machine and use it in conjunction with more scalable I/O solutions (see examples/engine).
## Why another HTTP library? ## Why another HTTP library?
This is my attempt at solving the "HTTP problem" for the C language. Writing C programs that behave as or interact with web services is always more painful than necessary in C. You either need to use `libcurl` which is overkill in most situations or link a large scale web servers to serve simple pages. This library targets smaller scale use-cases and tries to be as nice as possible to work with. Even then, it is fast. No performance is left on the table unless there is a specific reason. And if you do want to work at larger scales by using more sophisticate I/O systems (io_uring, I/O completion ports, etc) you can reuse the core state machine of the library that is I/O independant. This is my attempt at solving the "HTTP problem" for the C language. Writing C programs that behave as or interact with web services is always more painful than necessary in C. You either need to use `libcurl` which is overkill in most situations or link a large scale web servers to serve simple pages. This library targets smaller scale use-cases and tries to be as nice as possible to work with. Even then, it is fast. No performance is left on the table unless there is a specific reason. And if you do want to work at larger scales by using more sophisticate I/O systems (io_uring, I/O completion ports, etc) you can reuse the core state machine of the library that is I/O independant.
I would be comfortable with chttp handling up to 1000 simultaneous connections. For anything more than that I would reuse chttp's I/O independant state machine with my own multi-threaded and more scalable I/O.
## Features & Limitations ## Features & Limitations
* HTTP/1.1 server & client * HTTP/1.1 server & client
* Cross-platform (Windows & Linux) * Cross-platform (Windows & Linux)
+2
View File
@@ -8,3 +8,5 @@ Find a way to compile OpenSSL on windows
handle 3xx client redirections handle 3xx client redirections
add discussion on string management add discussion on string management
add discussion on error management add discussion on error management
check that virtual hosts over HTTPS work
add examples for the router
+2 -4
View File
@@ -732,15 +732,13 @@ void socket_free(Socket *sock) {
} }
} }
#define COUNT(X) (sizeof(X) / sizeof((X)[0])) int socket_wait(Socket **socks, int num_socks) // TODO: is this used?
int socket_wait(Socket **socks, int num_socks)
{ {
if (num_socks <= 0) if (num_socks <= 0)
return -1; return -1;
struct pollfd polled[100]; // TODO: make this value configurable struct pollfd polled[100]; // TODO: make this value configurable
if (num_socks > (int) COUNT(polled)) if (num_socks > (int) HTTP_COUNT(polled))
return -1; return -1;
for (;;) { for (;;) {