Socket Library
Avis de maturité : Cette bibliothèque est fonctionnelle et bien testée, mais récemment publiée. Elle convient au développement, aux outils internes et aux environnements contrôlés. Un déploiement en production avec des entrées réseau non fiables devrait attendre que le code ait accumulé plusieurs mois de durcissement en conditions réelles.
Boîte à outils de sockets haute performance orientée exceptions pour les systèmes POSIX. Fournit une API C moderne et propre pour TCP, UDP, sockets Unix domain, HTTP/1.1, HTTP/2, QUIC, WebSocket et TLS/DTLS avec une gestion complète des erreurs, des E/S sans copie et un polling d'événements multiplateforme.
Fonctionnalités
Réseau principal
- Sockets de flux TCP - Client/serveur TCP complet avec E/S scatter/gather
- Sockets de datagramme UDP - Modes sans connexion et connecté avec support multicast/broadcast
- Sockets Unix Domain - Sockets IPC avec support des identifiants de pair et passage de descripteurs de fichier
- Support TLS 1.3 - TLS moderne avec SNI, ALPN, reprise de session, CRL/OCSP, épinglage de certificat, Certificate Transparency (CT), déchargement kTLS, données précoces 0-RTT, KeyUpdate
- Support DTLS 1.2+ - UDP sécurisé avec échange de cookies pour la protection DoS, mise en cache de session, ALPN
Pile de protocole HTTP
- HTTP/1.1 - Analyseur DFA piloté par table (RFC 9112), encodage par blocs, prévention de contrebande de requêtes
- HTTP/2 - Tramage binaire, multiplexage de flux, contrôle de flux, push serveur (RFC 9113)
- HPACK - Compression d'en-têtes avec tables statiques/dynamiques, codage Huffman (RFC 7541)
- QPACK - Compression d'en-têtes HTTP/3 (RFC 9204), architecture à deux flux, gestion des flux bloqués
- Client HTTP - Pool de connexions, authentification (Basic/Digest/Bearer), cookies (RFC 6265)
- Serveur HTTP - Traitement des requêtes piloté par événements, keep-alive, arrêt gracieux
Transport QUIC
- Conforme RFC 9000 - Implémentation complète du protocole de transport QUIC v1
- Gestion des connexions - Rotation d'ID de connexion, réinitialisation sans état, validation d'adresse
- Multiplexage de flux - Flux bidirectionnels et unidirectionnels avec contrôle de flux
- Détection de pertes - Contrôle de congestion et récupération de pertes RFC 9002
- Migration de chemin - Migration de connexion transparente lors de changements de réseau
- Reprise 0-RTT - Reconnexion rapide avec support des données précoces
QUIC-TLS (RFC 9001)
- Protection de paquets - Cryptage AEAD (AES-128-GCM, AES-256-GCM, ChaCha20-Poly1305)
- Protection d'en-tête - Génération de masque AES-ECB/ChaCha20 pour le chiffrement du numéro de paquet
- Dérivation de clés - Secrets initiaux basés sur HKDF à partir du DCID client, clés de négociation/trafic
- Mise à jour de clé - Rotation du bit de phase de clé avec limites de confidentialité AEAD (RFC 9001 §6)
- Intégrité de relance - Vérification de l'étiquette AEAD pour les paquets Retry (RFC 9001 §5.8)
- Paramètres de transport - Extension TLS (type 0x39) pour l'échange de configuration QUIC
QPACK (RFC 9204)
- Compression d'en-têtes - Compression d'en-têtes HTTP/3 évitant le blocage de tête de ligne
- Architecture à deux flux - Flux séparés pour l'encodeur (0x02) et le décodeur (0x03)
- Table dynamique - Indexation absolue avec schémas relatifs à l'encodeur et au champ
- Table statique - 99 entrées prédéfinies (RFC 9204 Annexe A)
- Synchronisation d'état - Accusé de réception de section, annulation de flux, incrément du compteur d'insertion
- Gestion des flux bloqués - Limites de flux bloqués configurables avec négociation SETTINGS
WebSocket
- Conforme RFC 6455 - Implémentation complète du protocole WebSocket
- permessage-deflate - Extension de compression (RFC 7692) via zlib
- UTF-8 incrémental - Validation de trames de texte basée sur un DFA
- Auto-Ping/Pong - Battement de cœur configurable avec intégration de temporisateurs
Tunnel de proxy
- HTTP CONNECT - Tunnel de proxy avec authentification Basic
- SOCKS4/4a - Support SOCKS hérité
- SOCKS5 - RFC 1928/1929 avec authentification par nom d'utilisateur/mot de passe
- API asynchrone - Connexion proxy non bloquante avec machine d'état
Système d'événements
- Polling multiplateforme - epoll (Linux), kqueue (BSD/macOS), repli poll
- Mode déclenché par front - Notification d'événements haute performance
- E/S asynchrones - io_uring (Linux 5.1+), kqueue AIO (BSD/macOS)
- Temporisateurs - Ponctuel et répété avec tas min O(log n)
Gestion des connexions
- Pool de connexions - Recherche O(1) avec tables de hachage, tampons d'E/S par connexion
- Happy Eyeballs - Concurrence de connexion double pile IPv4/IPv6 RFC 8305
- Reconnexion automatique - Backoff exponentiel avec motif de disjoncteur
- Arrêt gracieux - Machine d'état de vidage de pool avec garantie de délai
Durcissement de la sécurité
- Protection contre les inondations SYN - Score de réputation, limitation, intégration noyau
- Suivi par IP - Limites de connexion et limitation de débit par client
- Limitation de débit - Algorithme du seau à jetons pour les connexions et la bande passante
- Prévention de contrebande de requêtes - Analyse HTTP stricte avec conformité RFC
Résolution DNS
- Résolveur asynchrone - Résolution non bloquante avec pool de threads et multiplexage de requêtes
- DNS-over-TLS (DoT) - DNS crypté RFC 7858/8310 avec modes opportuniste/strict
- DNS-over-HTTPS (DoH) - Requêtes DNS RFC 8484 sur HTTPS (méthodes POST/GET)
- Validation DNSSEC - Chaîne de confiance RFC 4033-4035, rejet authentifié NSEC/NSEC3
- Cookies DNS - Protection contre l'usurpation RFC 7873 via EDNS0
- Mise en cache négative - Gestion correcte NXDOMAIN/NODATA RFC 2308
- Erreurs DNS étendues - Codes d'erreur détaillés RFC 8914
Infrastructure
- Erreurs basées sur exceptions - Propagation propre des erreurs avec
TRY/EXCEPT/FINALLY
- API simple - Couche de commodité basée sur les codes de retour pour les opérations courantes (pas besoin de TRY/EXCEPT)
- Gestion de la mémoire Arena - Allocation efficace avec protection contre les débordements
- E/S de tampon circulaire - Tamponnage sans copie pour les opérations réseau
- E/S asynchrones - Opérations asynchrones optimisées pour la plateforme (io_uring/kqueue)
- Validation UTF-8 - Traitement UTF-8 axé sur la sécurité pour les trames de texte WebSocket
- Cadre de nouvelle tentative générique - Backoff exponentiel avec gigue pour des opérations résilientes
- Suivi de connexion par IP - Limites de connexion et limitation de débit par IP client
- E/S sans copie -
sendfile() optimisé pour la plateforme et E/S scatter/gather
- Observabilité - Journalisation enfichable, export de métriques Prometheus/StatsD/JSON, dispatching d'événements
- Utilitaires cryptographiques - SHA-1/256, HMAC, Base64, aléatoire sécurisé
- Système compatible POSIX (Linux, BSD, macOS)
- Compilateur C11 avec extensions GNU
- Threads POSIX (pthread) pour les opérations thread-safe
- Support IPv6 dans le noyau (pour les sockets double pile)
- NON portable vers Windows sans couche d'adaptation Winsock