v0.1.0-alpha  ·  GPL License

Servidor
HTTP
ligero.

arcd es un servidor HTTP escrito en C puro. Sin dependencias, sin magia. Configurable desde un archivo, controlado desde la terminal.

arcd — terminal
$ ./arcd arcd.conf [*] Configuración del servidor: Puerto : 8080 Raíz web : ./www Max conexiones : 10 [*] Servidor activo en el puerto: 8080 [200] GET /index.html — 192.168.1.10 [403] GET /secret.conf — 10.0.0.5 [WARN] conexiones al límite (10/10)
< 500
líneas de C
0
dependencias externas
HTTP/1.0
protocolo
POSIX
semáforos de concurrencia
// características

Diseñado para ser
auditable y extensible.

Cada componente tiene un propósito claro. El código es legible, el comportamiento es predecible.

fork()
Concurrencia real
Cada conexión corre en su propio proceso hijo. Un cliente lento no bloquea al resto.
sem_wait()
Control de carga
Semáforo POSIX limita las conexiones simultáneas. Configurable sin recompilar.
arcd.conf
Configuración externa
Puerto, directorio raíz y límite de conexiones en un archivo de texto plano.
path
Path traversal bloqueado
Peticiones con ../ son rechazadas con 403 antes de tocar el sistema de archivos.
GET HEAD
Métodos HTTP
Soporte para GET y HEAD. Métodos no implementados retornan 501 correctamente.
SIGCHLD
Sin procesos zombie
El manejador de señales recolecta hijos terminados automáticamente con waitpid.
// configuración

Un archivo.
Todo el control.

arcd lee arcd.conf al iniciar. Sin recompilar para cambiar el puerto o el directorio.

arcd.conf conf
# Configuración del servidor arcd

port            8080
www             ./www
max_connections 10
// respuestas HTTP

El color del estado.

Cada código HTTP tiene un significado semántico. arcd los usa de forma estricta.

2xx
Success
Archivo encontrado y servido correctamente al cliente.
3xx
Redirect
Redirección de tráfico. En roadmap para v0.3.
4xx
Client Error
404 recurso no encontrado. 403 acceso denegado o path traversal.
5xx
Server Error
501 método no implementado. Errores críticos de sistema.
// roadmap

De servidor ligero
a plataforma robusta.

El objetivo es llegar a paridad de funcionalidades con servidores modernos, manteniendo el núcleo auditable.

DONE Servidor HTTP/1.0 con fork() + semáforos POSIX v0.1
DONE Configuración externa arcd.conf v0.1
DONE Protección contra path traversal v0.1
WIP MIME types — CSS, JS, imágenes, PDF v0.2
WIP Logging a archivo con timestamp e IP v0.2
PLANNED Soporte CGI — Python, Bash, scripts externos v0.3
PLANNED Recarga de configuración con SIGHUP v0.3
PLANNED Lua embebido vía liblua v0.4
PLANNED HTTPS via mbedTLS v1.0
// instalación

Tres pasos.
Servidor activo.

Sin sistema de build, sin dependencias. Solo GCC y las cabeceras estándar de Linux.

1
Clonar el repositorio
bash
git clone https://github.com/usuario/arcd.git
cd arcd
2
Compilar
bash
gcc -Wall -Wextra -o arcd main.c -lpthread
3
Configurar y ejecutar
bash
# Editar arcd.conf según necesidad
sudo ./arcd arcd.conf