Esta seção detalha as principais funcionalidades do servidor.
O servidor usa arquitetura multi-threaded para lidar com conexões concorrentes. Quando uma nova conexão é aceita, a thread principal cria uma nova thread worker (pthread) para gerenciar todo o ciclo de vida da requisição HTTP.
Isso permite que a thread principal volte imediatamente a escutar novas conexões, evitando que novos clientes sejam bloqueados por requisições demoradas.
A thread worker é responsável por:
- Ler a requisição do cliente
- Processar os cabeçalhos HTTP
- Enviar a resposta
- Fechar a conexão
As threads são criadas em estado desconectado (pthread_detach), garantindo que seus recursos sejam automaticamente liberados pelo sistema.
O servidor implementa o seguinte comportamento baseado no método HTTP:
GET: Recupera o arquivo solicitado e envia seu conteúdo com os cabeçalhos apropriados (Content-Type,Content-Length, etc.)HEAD: Comporta-se identicamente aoGETmas não envia o conteúdo do arquivo. Envia apenas a linha de status e cabeçalhos- Outros Métodos (
POST,PUT,DELETE, etc.): Responde com501 Not Implemented
O servidor registra todas as requisições com formato padronizado:
[timestamp] - [client_ip] - "[method] [path]" [status_code]
Exemplo:
2025-09-28T18:30:00Z - 127.0.0.1 - "GET /index.html" 200 OK
- Primeiro plano: Logs exibidos no terminal com cores
- Daemon: Logs salvos em
server.loge exibidos no terminal
O servidor manipula sinais SIGINT (Ctrl+C) e SIGTERM para encerramento limpo, exibindo "Stopped" e limpando recursos.
Em modo daemon, o servidor:
- Exibe o PID correto no terminal
- Cria arquivo
server.pidno diretório atual - Remove o arquivo PID ao encerrar